Swift 2 (executeFetchRequest): обработка ошибок
У меня возникла проблема с кодом, который я не могу понять. После того, как я установил бета-версию Xcode 7 и конвертировал мой быстрый код в Swift 2
Код:
override func viewDidAppear(animated: Bool) {
let appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context: NSManagedObjectContext = AppDel.managedObjectContext
let request = NSFetchRequest(entityName: "PlayerList")
list = Context.executeFetchRequest(request)
tableView.reloadData()
}
ScreenShot:
![enter image description here]()
Ответы
Ответ 1
С Swift 2 методы Cocoa, которые создают ошибки, переводятся в функции Swift, которые вызывают ошибку.
Вместо необязательного возвращаемого значения и параметра ошибки, как в Swift 1.x:
var error : NSError?
if let result = context.executeFetchRequest(request, error: &error) {
// success ...
list = result
} else {
// failure
println("Fetch failed: \(error!.localizedDescription)")
}
в Swift 2 теперь метод возвращает необязательный параметр и выдает ошибку
в случае ошибки, который должен обрабатываться с помощью try-catch:
do {
list = try context.executeFetchRequest(request)
// success ...
} catch let error as NSError {
// failure
print("Fetch failed: \(error.localizedDescription)")
}
Дополнительные сведения см. в разделе "Обработка ошибок" в Принятие Cocoa Шаблоны проектирования
в Использование Swift с Cocoa и Objective-C.
Ответ 2
Вы можете попробовать этот код:
let result = (try! self.manageContext.executeFetchRequest(FetchRequest)) as! [NSManageObjectClass]
Ответ 3
Swift 3.0
В этом примере PlayerList является NSManagedObject имя объекта/класса (автоматически созданное Xcode)
let request: NSFetchRequest<PlayerList> = PlayerList.fetchRequest()
var result:[PlayerList]?
do{
//Succes
result = try context.fetch(request)
}catch let error as NSError {
//Error
print("Error \(error)")
}
print("result: \(result)")
Ответ 4
var results = [YourEntity]?
results = try! self.managedObjectContext!.executeFetchRequest(fetchRequest) as! [YourEntity]
Ответ 5
Попробуйте код ниже
override func viewWillAppear(animated: Bool) {
let appDel:AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
let context = appDel.managedObjectContext
let request = NSFetchRequest(entityName:"Users")
do {
let results = try context.executeFetchRequest(request)
itemList = results as! [NSManagedObject]
} catch let error as NSError {
print("Could not fetch \(error), \(error.userInfo)")
}
}