仅在OSX中使用Magical Record创建实体(+ entityForName:在此模型中找不到名为'(null)'的实体。)

时间:2013-10-06 16:29:03

标签: macos core-data magicalrecord

您好我在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中找到任何可行的方法。

4 个答案:

答案 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);

工作正常。