您好我在OSX中使用magicalRecord创建实体时遇到问题,我创建模型和NSManagagedSubclasses等等。但是当我在applicationDidFinishLaunching中运行这段代码时(我使用的是magicalRecord 2.2):
[MagicalRecord setupCoreDataStack];
Person * person = [Person MR_createEntity];
person.name = @"alex";
我在日志中得到了这个:
2013-10-06 18:01:54.320 TestMagicalRecord[7554:303] +[NSManagedObjectContext(MagicalRecord) MR_contextWithStoreCoordinator:](0x7fff71a96238) -> Created Context UNNAMED
2013-10-06 18:01:54.321 TestMagicalRecord[7554:303] +[NSManagedObjectContext(MagicalRecord) MR_setRootSavingContext:](0x7fff71a96238) Set Root Saving Context: <NSManagedObjectContext: 0x101924d00>
2013-10-06 18:01:54.321 TestMagicalRecord[7554:303] +[NSManagedObjectContext(MagicalRecord) MR_newMainQueueContext](0x7fff71a96238) Created Main Queue Context: <NSManagedObjectContext: 0x1001564a0>
2013-10-06 18:01:54.321 TestMagicalRecord[7554:303] +[NSManagedObjectContext(MagicalRecord) MR_setDefaultContext:](0x7fff71a96238) Set Default Context: <NSManagedObjectContext: 0x1001564a0>
2013-10-06 18:01:54.322 TestMagicalRecord[7554:303] +entityForName: could not locate an entity named '(null)' in this model.
当我在IOS项目中运行相同的代码时它运行没有问题,我一直在尝试找到OSX的示例代码,但没有运气,它应该有什么不同吗?
魔法记录Github repo中的Mac示例代码只包含一个项目是否有办法与其他资源一起运行?
我打赌它是一个简单的解决方案,但我无法在Docs / SO中找到任何可行的方法。
答案 0 :(得分:2)
正如您在同一时间发现的那样,这是魔法记录开发分支中的一个错误。
在2.2版本的Development分支中,MR_createEntity
使用以下方法确定应创建的对象的实体名称:
+ (NSString *) MR_bestGuessAtAnEntityName
{
if ([self respondsToSelector:@selector(entityName)])
{
return [self performSelector:@selector(entityName)];
}
return NSStringFromClass(self);
}
但是(至少在OS X 10.8上),NSObject
实际上响应到entityName
,并且正在调用
该方法返回nil
。我找不到任何关于此的文档,所以这可能是
一些内部无证的方法。
但效果是MR_bestGuessAtAnEntityName
返回nil
,因此
+ (id) MR_createInContext:(NSManagedObjectContext *)context
{
return [NSEntityDescription insertNewObjectForEntityForName:[self MR_bestGuessAtAnEntityName] inManagedObjectContext:context];
}
失败并显示错误消息
+entityForName: could not locate an entity named '(null)' in this model.
所以这是一个魔法记录错误,值得向维护者报告。
该错误仅发生在OS X上,因为NSObject
(或NSManagedObject
)不响应iOS上的entityName
。
答案 1 :(得分:0)
确保您的模型文件正在编译为目标的一部分。您可以通过在项目导航器中选择xcdatamodel文件来查看,然后在检查器区域中查找它所属的目标。或者,您可以检查构建设置并确保此文件位于编译文件部分。
答案 2 :(得分:0)
问题是我没有使用Github的正确分支我有开发分支而不是主分支!希望这有助于其他犯这个愚蠢错误的人......
答案 3 :(得分:0)
和Martin R一样!
NSManagedObject+MagicalRecord.m
+ (NSString *) MR_bestGuessAtAnEntityName
return NSStringFromClass(self);
工作正常。