Swift 2(executeFetchRequest): manejo de errores
swift2 (5)
Tengo un problema con el código que no puedo entender. Después de instalar Xcode 7 beta y convertir mi código swift a Swift 2
Código:
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()
}
Captura de pantalla:
A partir de Swift 2, los métodos de Cocoa que producen errores se traducen en funciones de Swift que arrojan un error.
En lugar de un valor de retorno opcional y un parámetro de error como en Swift 1.x :
var error : NSError?
if let result = context.executeFetchRequest(request, error: &error) {
// success ...
list = result
} else {
// failure
println("Fetch failed: /(error!.localizedDescription)")
}
en Swift 2, el método ahora devuelve un no opcional y arroja un error en el caso de error, que debe manejarse con try-catch:
do {
list = try context.executeFetchRequest(request)
// success ...
} catch let error as NSError {
// failure
print("Fetch failed: /(error.localizedDescription)")
}
Para obtener más información, consulte "Manejo de errores" en "Adopción de patrones de diseño de cacao" en la documentación "Uso de Swift con cacao y Objective-C" .
Prueba el siguiente código
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)")
}
}
Puedes probar este código:
let result = (try! self.manageContext.executeFetchRequest(FetchRequest)) as! [NSManageObjectClass]
Swift 3.0 En este ejemplo, PlayerList es una entidad / nombre de clase NSManagedObject (creado automáticamente por 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)")
var results = [YourEntity]?
results = try! self.managedObjectContext!.executeFetchRequest(fetchRequest) as! [YourEntity]