2017-02-26 97 views
0

我試圖獲取我以前保存過的數據,但事情並沒有像預期的那樣進行。當我嘗試打印結果,我得到以下錯誤:CoreData:錯誤返回nil試圖獲取

fatal error: unexpectedly found nil while unwrapping an Optional value 
2017-02-26 15:32:32.596867 Money Manager[2047:475120] fatal error: unexpectedly found nil while unwrapping an Optional value 

我找不到,對我工作的任何答案...

下面是代碼,當我嘗試獲取:

func getExpensesData() { 
    let fetchRequest: NSFetchRequest<Activity> = Activity.fetchRequest() 
    do { 
     let results = try context.fetch(fetchRequest) as [Activity] 
     activities = results 
     for activity in activities { 
      // I get the error I mentionned just the line below 
      print(activity.title!) 
     } 
    } catch let error as NSError { 
     print("Could not fetch \(error), \(error.userInfo)") 
    } 
} 

其中Activity是一個實體。

這裏也是代碼的時候我保存數據:

func saveNewContent() { 
    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    let context = appDelegate.persistentContainer.viewContext 
    let entity: NSEntityDescription = NSEntityDescription.entity(forEntityName: "Activity", in: context)! 
    let newActivity = NSManagedObject(entity: entity, insertInto: context) as! Activity 

    if checkFieldsAreValid() { 
     newActivity.isExpense = expenseBenefitSwitch.isOn 
     newActivity.isRecurrent = recurrentSwitch.isOn 
     newActivity.amount = amountView.text 
     newActivity.title = titleView.text 
     do { 
      try context.save() 
     } catch let error as NSError { 
      print("Could not save. \(error), \(error.userInfo)") 
     } 
    } 
} 

對不起了一些錯誤,我可以發了,這是我在這裏的第一篇文章。如果您需要其他代碼,請告訴我。

在此先感謝!

更新#1:

運行的其他幾個測試後,我得到了我嘗試保存數據,即newActivity,看起來在保存之前空...

當我將斷點權利之前

try context.save() 

這裏是我得到: Structure

更新#2:

更深的搜索後,我發現這個問題似乎是,當我嘗試獲取對象的屬性之一出現錯誤要與CoreData斷層相連。

當我打印物體的一種牽強,我得到這個:

<Activity: 0x170284dd0> (entity: Activity; id: 0xd000000000040000 <x-coredata:// 
68148348-928B-43BE-901C-2073ABFA46EF/Activity/p1> ; data: <fault>) 

這裏是我使用的代碼,當我嘗試獲取屬性(在UITableViewCell中的自定義子類中使用):

func initialize(withContent activity: Activity) { 
    print(activity) 
    titleLabel.text = (activity.value(forKey: "title") as! String) 
} 
+0

請提供回覆,您可能會錯過結構,您需要正確解析數據。檢查你的迴應結構或提供給我。 – Ren

+0

錯誤定義,活動是零,它試圖訪問標題,並導致致命的錯誤。 – Ren

+0

您是否嘗試刪除應用並重試?你可能在你的數據庫中有一個'Activity'實體,它是在你添加核心之前創建的,以確保只插入帶有非零標題的'Activity'實體。 –

回答

0

在投資我的應用程序越來越深入後,我發現該錯誤並未因CoreData而引發,但由於自定義的UITableViewCell,我忘記了正確初始化......因此,當我嘗試執行此操作時:

textLabel.text = activity.title 

它提出,因爲的UILabel的錯誤,而不是活動...

非常感謝您的幫助,我注意到你的建議的!

+0

很酷!你找到了解決方案。 – Ren