3

嗨,我在 OSX 中使用 magicRecord 创建实体时遇到问题,我创建了模型和 NSManagedSubclasses 等等。但是当我在 applicationDidFinishLaunching 中运行这段代码时(我使用的是 magicRecord 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 找到示例代码,但没有运气,它应该有什么不同吗?

Magical record Github repo 中的 Mac 示例代码只包含一个项目,有没有办法用其他资源运行它?

我打赌它是一个简单的解决方案,但我在 Docs/SO 中找不到任何可行的方法。

4

4 回答 4

2

正如您同时发现的,这是 Magical Record 开发分支中的一个错误。

在 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: 在此模型中找不到名为“(null)”的实体。

所以这是一个神奇的记录错误,值得向维护者报告。该错误仅发生在 OS X 上,因为NSObject(or )在 iOSNSManagedObject上没有响应。entityName

于 2013-10-06T17:59:29.853 回答
0

确保您的模型文件正在编译为目标的一部分。您可以通过在项目导航器中选择 xcdatamodel 文件来查看这一点,然后在检查器区域中查找它所属的目标。或者,您可以检查构建设置并确保此文件位于编译文件部分。

于 2013-10-06T16:54:24.777 回答
0

问题是我没有使用来自 Github 的正确分支我有开发分支而不是主分支!希望这可以帮助其他犯这个愚蠢错误的人......

于 2013-10-06T17:16:05.540 回答
0

就像马丁 R!

  • 转到文件NSManagedObject+MagicalRecord.m
  • 查找方法:+ (NSString *) MR_bestGuessAtAnEntityName
  • 替换为:return NSStringFromClass(self);

工作正常。

于 2014-05-26T09:23:07.160 回答