在模拟器和我的真实设备上,都会在应用程序终止时保存一个字符串数组。当我重新启动应用程序并为我的持久数据获取请求时(来自 viewDidLoad 或手动按钮操作),我在第一次尝试时得到一个空数组。直到我第二次 fetchRequest 时,我才终于拿到了我的数据。
有趣的是,这个问题似乎没有涉及时间差异。在尝试第二次获取之前,我尝试设置各种超时。我是否等待 10 秒到 1 分钟都没关系——甚至在第一次获取后立即等待;数据仅在第二次尝试时获取。
我必须使用这段代码来获取我的数据:
var results = try self.context.fetch(fetchRequest) as! [NSManagedObject]
while (results.isEmpty) {
results = try self.context.fetch(fetchRequest) as! [NSManagedObject]
}
return results
为了我的理智,这里有一个 list :
- 我正在使用来自 Apple 的样板代码初始化核心数据堆栈:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/InitializingtheCoreDataStack.html#//apple_ref/doc/uid/TP40001075-CH4-SW1
- 我将我的单个 DataController 实例放在类顶部的静态变量中
private static let context: NSManagedObjectContext = DataController().managedObjectContext
- 我成功地保存了我的上下文并且可以在单个 session 中毫无问题地检索项目;但是在随后的 session 中第一次尝试获取时,我得到了一个空数组(这就是问题所在)。
注意** 我忘了说我正在构建一个框架。我将 CoreData 与框架的包标识符一起使用,并使用框架中包含的模型,因此我想避免必须使用框架外部的逻辑(除了在 appDelegate 中初始化框架之外)。
最佳答案
核心数据堆栈应该在位于 appDelegate.swift 的 applicationDidFinishLaunchingWithOptions 中初始化,因为 psc 是在您尝试获取数据之后添加的。
关于ios - 必须从 CoreData 调用 fetch 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41687289/