web-dev-qa-db-fra.com

Swift 2 (executeFetchRequest): traitement des erreurs

J'ai un problème avec le code que je n'arrive pas à comprendre. Après avoir installé Xcode 7 beta et converti mon code Swift en Swift 2

Code:

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()
}

Capture d'écran:

enter image description here

19
aNaKuWaiTy

À partir de Swift 2, les méthodes Cocoa qui génèrent des erreurs sont traduites en fonctions Swift qui génèrent une erreur.

Au lieu d'une valeur de retour facultative et d'un paramètre d'erreur comme dans Swift 1.x:

var error : NSError?
if let result = context.executeFetchRequest(request, error: &error) {
    // success ...
    list = result
} else {
    // failure
    println("Fetch failed: \(error!.localizedDescription)")
}

dans Swift 2, la méthode retourne maintenant une valeur non optionnelle et génère une erreurdans le cas d'erreur, celle-ci doit être gérée avec try-catch:

do {
    list = try context.executeFetchRequest(request)
    // success ...
} catch let error as NSError {
    // failure
    print("Fetch failed: \(error.localizedDescription)")
}

Pour plus d'informations, voir "Traitement des erreurs" dans "Adoption de modèles de conception Cocoa" Dans "Utilisation de Swift avec Cocoa et Objective-C" .

54
Martin R

Vous pouvez essayer ce code: 

let  result = (try! self.manageContext.executeFetchRequest(FetchRequest)) as! [NSManageObjectClass]
4
Sanju

Swift 3.0 Dans cet exemple PlayerList est NSManagedObject nom entité/classe (créé automatiquement par 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)")
3
Trevor
var results = [YourEntity]?
results = try! self.managedObjectContext!.executeFetchRequest(fetchRequest) as! [YourEntity]
1
Macondo2Seattle

Essayez le code ci-dessous

 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)")
        }


    }
1
Tejveer Sambariya