【问题标题】:CoreData : error return nil when trying to fetchCoreData:尝试获取时返回 nil 错误
【发布时间】:2017-07-17 03:18:09
【问题描述】:

我正在尝试获取我之前保存的数据,但事情并没有按预期进行。当我尝试打印结果时,出现以下错误:

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

【问题讨论】:

  • 请提供响应,您可能缺少结构,您需要正确解析数据。检查您的响应结构或提供给我。
  • 错误定义,activity 为 nil,它正在尝试访问 title,它导致了致命错误。
  • 您是否尝试删除您的应用并重试?您的数据库中可能有一个 Activity 实体,该实体是在您添加核心之前创建的,以确保仅插入具有非零标题的 Activity 实体。
  • @Ren 我更新了帖子
  • @JonRose 我做了几次:第一次运行它时没有问题(显然)但是当我尝试保存新内容时发生错误:/

标签: ios swift core-data


【解决方案1】:

好吧,在我越来越深入地投资我的应用程序之后,我发现错误不是因为 CoreData 而引发的,而是因为自定义 UITableViewCell 我忘记正确初始化......因此,当我尝试这样做时:

textLabel.text = activity.title

它引发错误是因为 UILabel,而不是活动...

非常感谢您的帮助,我注意到您的建议!

【讨论】:

  • 酷!您找到了解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 2020-09-18
  • 2017-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多