gpt4 book ai didi

ios - 如何在框架内使用 Core Data 的 ManagedObjectModel?

转载 作者:IT王子 更新时间:2023-10-29 07:52:42 29 4
gpt4 key购买 nike

我正在尝试将我的一个应用程序的特定部分迁移到一个框架中,以便我可以在我的应用程序本身和那些精美的新 iOS 8 小部件之一中使用它。这部分是处理我在核心数据中的所有数据的部分。移动所有内容并访问它非常简单。我只是无法访问其中的 momd 文件。

在创建 NSManagedObjectModel 时,我仍然尝试加载 momd,如 Apple 的代码模板所示:

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"MyApp" withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

不幸的是,modelURL 保持为 nil,因此 MyApp 在访问 Core Data 堆栈时崩溃并出现此错误:

2014-08-01 22:39:56.885 MyApp[81375:7417914] Cannot create an NSPersistentStoreCoordinator with a nil model
2014-08-01 22:39:56.903 MyApp[81375:7417914] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Cannot create an NSPersistentStoreCoordinator with a nil model'

那么,在使用 Core Data 的框架内工作时,正确的方法是什么?

最佳答案

对于 flohei 的问题,我来晚了一点,但希望这对路过的其他人有所帮助。无需执行 script-fu 来复制资源就可以让它工作!

默认情况下,Apple 的 Core Data 模板会为您提供如下内容:

lazy var managedObjectModel: NSManagedObjectModel = {
let modelURL = NSBundle.mainBundle().URLForResource("MyCoreDataModel", withExtension: "momd")!
return NSManagedObjectModel(contentsOfURL: modelURL)!
}()

这将从主包中加载您的 Core Data 资源。这里的关键是:如果 Core Data 模型加载到框架中,.momd 文件在该框架的包中。所以我们只是这样做:

lazy var managedObjectModel: NSManagedObjectModel = {
let frameworkBundleIdentifier = "com.myorg.myframework"
let customKitBundle = NSBundle(identifier: frameworkBundleIdentifier)!
let modelURL = customKitBundle.URLForResource("MyCoreDataModel", withExtension: "momd")!
return NSManagedObjectModel(contentsOfURL: modelURL)!
}()

这应该可以让您启动并运行。

来源:https://www.andrewcbancroft.com/2015/08/25/sharing-a-core-data-model-with-a-swift-framework/

关于ios - 如何在框架内使用 Core Data 的 ManagedObjectModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25088367/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com