Fore xcode 加载包
Posted
技术标签:
【中文标题】Fore xcode 加载包【英文标题】:Fore xcode to load bundle 【发布时间】:2013-09-09 12:36:47 【问题描述】:核心数据模型位于添加到主项目的捆绑包中。现在我必须将核心数据迁移到更新的模型。我一直在关注一些示例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;
对于迁移部分,它表示包尚未加载并为 pathForResource 返回 nil。
【问题讨论】:
【参考方案1】:您可以使用NSBundle
方法load
强制加载捆绑包(docs here)。编辑:正如你所说,这仅适用于可执行代码,不适用于资源。
关于将 CoreData 模型放在单独的包中,如果您想在多个应用程序中重用该模型(和/或任何其他资源),这是一种常见的做法。如果您不希望这样,则没有理由拥有单独的捆绑 IMO。
【讨论】:
感谢您的回答。 load 用于加载可执行代码。我正在寻找加载核心数据模型(momd 文件)。 你是对的 - 刚刚编辑了我的答案。您能否将代码的 sn-p 粘贴到您正在创建包和模型的位置? 模型和包是用 xcode 创建的。模型被添加到包中,并且包被添加到目标中。我这边没有代码。 但我想您正在调用 bundleWithURL: 或 bundleForPath: (创建捆绑对象),然后还以某种方式创建托管对象模型...您可以复制粘贴该代码吗? 我刚刚发布了那部分。那部分确实有效。我的意思是我可以读取和保存数据,其中一些读取发生在应用程序中并通过选项启动。【参考方案2】:我最终将数据模型移动到主包中,因为启动时无法加载资源包。
【讨论】:
以上是关于Fore xcode 加载包的主要内容,如果未能解决你的问题,请参考以下文章