web-dev-qa-db-ja.com

Swift 2(executeFetchRequest):エラー処理

理解できないコードの問題が発生しました。 Xcode 7ベータ版をインストールして、Swiftコードを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

20
aNaKuWaiTy

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

詳細については、 "Using Swift with Cocoa and Objective-C""Adopting Cocoa Design Patterns" の「Error Handling」を参照してください。 =ドキュメント。

54
Martin R

あなたはこのコードを試すことができます:

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

Swift 3.この例では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)")
3
Trevor
var results = [YourEntity]?
results = try! self.managedObjectContext!.executeFetchRequest(fetchRequest) as! [YourEntity]
1
Macondo2Seattle

以下のコードを試してください

 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