2016-10-03 51 views
3

我將代碼從swift 2.2遷移到Swift 2.3,同時遷移時我意識到在iOS 10中,NSFetchRequest現在是參數化類型。因此,我決定如下修改我的代碼,iOS 10中的參數化NSFetchRequest返回<未初始化>

var fetchRequest : NSFetchRequest<SomeEntity> 
      if #available(iOS 10.0, *) { 
       fetchRequest = SomeEntity.fetchRequest() as! NSFetchRequest< SomeEntity> 
      } else { 
       fetchRequest = NSFetchRequest(entityName: "SomeEntity") 
      } 

      fetchRequest.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)] 
      let appdelegate = UIApplication.shared.delegate as! AppDelegate 
      let SomeEntityArray = try! appdelegate.managedObjectContext.fetch(fetchRequest) 

現在,當我跑的代碼,並把破發點上fetchRequest初始化並打印其描述我「」關於執行進一步的代碼崩潰日誌崩潰

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'executeFetchRequest:error: is not a valid NSFetchRequest.'

的卸下如果條件並保持它只是

var fetchRequest : NSFetchRequest<SomeEntity> 
fetchRequest = NSFetchRequest(entityName: "SomeEntity") 
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)] 
let appdelegate = UIApplication.shared.delegate as! AppDelegate 
let SomeEntityArray = try! appdelegate.managedObjectContext.fetch(fetchRequest) 

一切正常!

請告訴我與

if #available(iOS 10.0, *) { 
       fetchRequest = SomeEntity.fetchRequest() as! NSFetchRequest< SomeEntity> 
      } 

問題,請你幫幫我,在此先感謝。

+0

我也面臨着同樣的問題。你有沒有找到答案? – Ranjit

+0

@Ranjit:雖然不是我觀察到的這種解決方案經常出現在模擬器中,並且在設備上正常工作,但不確定是iOS還是模擬器的bug :)最後在managedObjectContext.perform()或managedObjectContext.performWait ()有助於停止崩潰以及:) –

+0

好的謝謝sandeep – Ranjit

回答

1

這裏是一個正常工作的代碼: let request = NSFetchRequest<NSFetchRequestResult>(entityName:"Your Entity Name")

+0

使用此讓請求= NSFetchRequest (entityName:「實體名稱」) –

+0

它適用於我。對於iOS 10,它也可以工作 –