我正在尝试将我的一个应用程序的特定部分迁移到一个框架中,这样我就可以在我的应用程序本身以及那些花哨的新iOS 8小部件中使用它。这个部分负责处理Core Data中的所有数据。把所有东西都移过去并访问它是非常简单的。我只是在访问里面的momd文件时遇到了问题。
在创建NSManagedObjectModel时,我仍然尝试加载momd,如苹果的代码模板所示:
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"MyApp" withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];不幸的是,modelURL保持nil,因此在访问核心数据堆栈时MyApp崩溃,并显示以下错误:
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的框架中工作时,正确的方法是什么呢?
发布于 2015-11-01 16:42:27
我在flohei的问题上有点晚了,但希望这能帮助其他漫步的人。可以在不执行script-fu复制资源的情况下使其正常工作!
默认情况下,Apple的核心数据模板如下所示:
lazy var managedObjectModel: NSManagedObjectModel = {
let modelURL = NSBundle.mainBundle().URLForResource("MyCoreDataModel", withExtension: "momd")!
return NSManagedObjectModel(contentsOfURL: modelURL)!
}()这将从主包中加载您的核心数据资源。这里的关键是:如果核心数据模型被加载到框架中,那么.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/
发布于 2015-04-05 09:14:35
您需要将xcdatamodeld文件拖放到使用该框架的目标的构建阶段|编译源中。然后,当目标运行它的NSBundle时,mainBundle将包含模型(momd文件)。
发布于 2015-08-09 16:05:02
@里克·桑托斯就快到了。我认为你只需要让它成为一个“妈妈”扩展,而不是“妈妈”,然后它就会运行。
lazy var managedObjectModel: NSManagedObjectModel = {
let modelURL = NSBundle(forClass: self.dynamicType.self).URLForResource(self.dataModelName, withExtension: "mom")!
return NSManagedObjectModel(contentsOfURL: modelURL)!
}()https://stackoverflow.com/questions/25088367
复制相似问题