0

为什么我添加另一个版本的 DataModel 后,我的 NSManagedDataModel 没有实体?

MacBook Pro Late 2008, OS X 10.8.5, Xcode 5.0.2, Project 有两个app,一个OS X,一个iOS,都共享一个datamodel 最近新增一个dataModel 版本DataModel 涉及NSManagedObject 的四个子类。四个类中的每一个都收到了两个相同的更改,即添加了两个属性:修改了 NSDate uid NSString 我没有选择选项:在生成四个类的文件时使用原始数据类型的标量属性。

在 OS X 应用程序中执行以下四行时,

NSString *path = [[NSBundle mainBundle] pathForResource:@"SqliteFromXml" ofType:@"momd"];
NSURL *momdURL = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momdURL];

NSLog(@"path=%@\nDataModel=%@\nEntities in DM=%@",path,managedObjectModel,[managedObjectModel entities]);

这是输出:

path=/Users/appleuser/SqliteFromXml/Debug/SqliteFromXml.app/Contents/Resources/SqliteFromXml.momd

DataModel=(<NSManagedObjectModel: 0x1001d1b80>) isEditable 0, entities {
}, fetch request templates {
}

Entities in DM=( )

每次运行都会创建 momd 包,但它有 0 个实体。

.app 包内容看起来是这样的:

https://www.dropbox.com/s/68iy8gjqbv0m0tq/Screenshot%202014-02-16%2018.03.02.png

非常感谢,马克

4

1 回答 1

0

数据模型包名称:IHM_Recipes.xcdatamodeld(作为原始 iOS 应用程序的一部分开发) 有两个产品共享一个通用数据模型:iHungryMePlus (iOS) SqliteFromXml (Mac)

在我为 pathForResource: 选择参数时出现用户错误:对于下面的第一行代码:

 NSString *path = [[NSBundle mainBundle] pathForResource:@"IHM_Recipes" ofType:@"momd"];
 NSURL *momdURL = [NSURL fileURLWithPath:path];
 managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momdURL];

我使用了 pathForResourceParam == @"SqliteFromXml"。很抱歉浪费您的时间。因为创建了一个名为 SqliteFromXml.momd 的 momd 文件,所以我错误地认为 pathForResourceParam 用于定位而不是搜索。我现在看到这是非常糟糕的逻辑。这种创建 MOM 的方法来自 Jeff Lamarche。

于 2014-02-19T17:22:08.483 回答