Подтвердить что ты не робот

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

4b9b3361

Ответ 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)")
        }


    }