首页 文章

Swift 2(executeFetchRequest):错误处理

提问于
浏览
19

我遇到了一些我无法弄清楚的代码问题 . 在我安装了Xcode 7 beta并将我的swift代码转换为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()
}

ScreenShot:

enter image description here

5 回答

  • 3
    var results = [YourEntity]?
    results = try! self.managedObjectContext!.executeFetchRequest(fetchRequest) as! [YourEntity]
    
  • 1

    请尝试下面的代码

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

    从Swift 2开始,产生错误的Cocoa方法被转换为抛出错误的Swift函数 .

    而不是_2617610中的可选返回值和错误参数:

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

    有关详细信息,请参阅"Using Swift with Cocoa and Objective-C"文档中"Adopting Cocoa Design Patterns"中的"Error Handling" .

  • 4

    你可以尝试这段代码:

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

    Swift 3.0 在此示例中 PlayerListNSManagedObject 实体/类名称(由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)")
    

相关问题