【问题标题】:iOS Core Data "initialization time"?iOS Core Data“初始化时间”?
【发布时间】:2013-06-10 21:38:15
【问题描述】:

在我的 viewWillAppear 中,我执行了多个获取请求。我注意到在第一次获取请求时,即使我知道应该找到项目,也没有找到任何东西。在执行第一个 fetch 请求之前,我尝试让主线程休眠,并确定找到了足够的项目。顺便说一句,我也只在模拟器上运行。

所以我的问题是,Core Data 是否需要一些时间来“初始化”或什么?在设备上测试时我是否需要担心这个问题(我还没有开发人员会员资格,所以我无法在设备上测试它)?有什么方法可以“检查”执行 fetch 请求是否安全?

我还没有延迟地检查了第一个 fetch 请求的 NSError,它是 null。

编辑:

请求了我的 viewWillAppear 代码,所以就在这里。不过不是很有帮助。

    [NSThread sleepForTimeInterval:0.1];
    for (NSString *category in self.categories) {
        [self updateSection:category];
    }

self.cateogires 只是我的表格视图和 updateSection 的部分:更新这些部分。

EDIT2:

我对 NSLog 语句做了一些进一步的调查,这就是我的发现。

我添加了 NSLog 语句来记录在获取请求后找到了多少对象以及文档的当前状态。出于某种原因,即使文档似乎已关闭,我也会得到获取结果。

Category1 has 3 values
Doc is open? NO
Category2 has 6 values
Doc is open? NO
Category3 has 3 values
Doc is open? NO
Category4 has 2 values
Doc is open? NO

我认为我的问题是我没有使用 [myManagedDocument openWithCompletionHandler: ] 的 completionHandler 来等待并执行我的获取请求。但是,为什么我在关闭文档时查询会得到 fet 结果?

【问题讨论】:

  • 您可以从您的 viewWillAppear 方法中发布代码吗?
  • 也许您的托管对象上下文或持久存储协调器或持久性堆栈中的任何内容尚未初始化并且为零?在 nil 对象上调用 fetch 请求不会出错,它只会根据 Objective-C 策略对 nil 的调用不执行任何操作。
  • 或者你有一个持久化存储协调器,但还没有添加任何持久化存储——虽然我认为这会出错,但不确定。
  • moc 肯定不是 nil,因为只有 for 循环的第一个循环未命中。所有其他循环都可以正常工作并使用相同的 moc 发出不同的获取请求。此外,当我像在代码中那样休眠线程时,第一个循环工作正常;只有当我不睡觉时它才会失败。
  • 查看我的edit2以获取有关该问题的一些新信息

标签: ios core-data initialization fetch


【解决方案1】:

建议你试试changingconcurrency type

NSMainQueueConcurrencyType。这将使操作按顺序进行。

【讨论】:

    猜你喜欢
    • 2011-12-16
    • 2020-05-31
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 2012-10-06
    • 2018-03-15
    • 1970-01-01
    相关资源
    最近更新 更多