前xcode加载包

时间:2013-09-09 12:36:48

标签: ios xcode core-data nsbundle

核心数据模型是一个捆绑包,它被添加到主项目中。现在我必须将核心数据迁移到更新的模型。我一直在关注一些示例like this,所以我想在任何查询或导入之前迁移数据库。所以我将代码放在- (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;
}

对于迁移部分,它表示bundle尚未加载,并为pathForResource返回nil。

2 个答案:

答案 0 :(得分:0)

您可以使用NSBundle方法load强制加载包(docs here)。编辑:正如您所说,这仅适用于可执行代码,而不适用于资源。

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

答案 1 :(得分:0)

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