2015-06-20 57 views
19

我遇到了一些我無法弄清楚的代碼問題。之後,我安裝的Xcode 7測試版,我的SWIFT代碼轉換爲斯威夫特2Swift 2(executeFetchRequest):錯誤處理

代碼:

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

截圖:

enter image description here

回答

54

隨着斯威夫特2,可可中的方法產生錯誤被轉換爲引發錯誤的Swift函數。

代替可選的返回值和誤差參數作爲夫特的1.x的:

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

夫特2該方法現在返回一個非可選的,並且在引發錯誤 錯誤情況下,必須用try-catch代碼來處理:

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

有關更多信息,請參閱 「錯誤處理」 中"Adopting Cocoa Design Patterns""Using Swift with Cocoa and Objective-C"文檔中。

+2

而且,如果您嘗試使用填充了自定義值的數組,您的獲取線將如下所示......'ideas = try self.managedObjectContext!.executeFetchRequest(fetchRequest)as! [想法]' – justColbs

+0

如果我只有'list'的實例而不是它的數組,我該怎麼做? – jo3birdtalk

+0

@ jo3birdtalk:executeFetchRequest()總是返回一個數組。如果只有一個實例,則可以訪問它,例如通過'list [0]'或'list.first'。 –

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

嗨,如果我沒有一個'YourEntity'數組而只是一個實例,我該怎麼做?我嘗試沒有大括號,它不斷提示我,不能轉換AnyObject鍵入'User' – jo3birdtalk

+0

@ jo3birdtalk只要讓myResult = results?.first。如果你知道你的獲取請求應該只返回一個對象,這就是你如何獲得它。 – Macondo2Seattle

4

你可以試試這個代碼:

let result = (try! self.manageContext.executeFetchRequest(FetchRequest)) as! [NSManageObjectClass] 
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)") 
     } 


    } 
+0

一般來說,我會建議你添加一個簡短的描述,除了你發佈的任何代碼。 (例如,如果會出現拼寫錯誤,或者人們沒有機會直接嘗試,人們仍然可以很容易地理解)。 –

3

雨燕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)")