0

核心数据模型在添加到主项目的捆绑包中。现在我必须将核心数据迁移到更新的模型。我一直在关注这样的例子所以我想在任何查询或导入发生之前迁移数据库。所以我将代码放入其中,- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions但当时未加载包含核心数据模型的包。拿到捆绑包说它还没有加载。所以我无法开始迁移过程。

我怎样才能强制它加载这个包?

除了主包之外,将核心数据模型放在单独的包中是一种好方法吗?

编辑:

- (NSManagedObjectModel*)objectModel
{
if (_objectModel)
    return _objectModel;

    NSString *bundlePath = [[NSBundle mainBundle] pathForResource:kDataManagerBundleName ofType:@"bundle"];
    NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];

NSString *modelPath = [bundle pathForResource:kDataManagerModelName ofType:@"momd"];
_objectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:[NSURL fileURLWithPath:modelPath]];

return _objectModel;
}

对于迁移部分,它说捆绑尚未加载并为 pathForResource 返回 nil。

4

2 回答 2

0

您可以使用该NSBundle方法load强制加载捆绑包(此处的文档)。编辑:正如您所说,这仅适用于可执行代码,不适用于资源。

关于将 CoreData 模型放在单独的包中,如果您想在多个应用程序中重用该模型(和/或任何其他资源),这是一种常见的做法。如果您不希望这样,则没有理由拥有单独的捆绑 IMO。

于 2013-09-09T13:05:54.110 回答
0

我最终在主包中移动了数据模型,因为在启动时无法加载资源包。

于 2013-09-21T08:30:44.287 回答