【问题标题】:NSManagedObject is failing isKindOfClass testNSManagedObject isKindOfClass 测试失败
【发布时间】:2015-02-28 07:55:33
【问题描述】:

我有一个 NSManagedObject。当我创建一个实例时,它意外地使 isKindOfClass 方法失败。

NSEntityDescription *entity = [NSEntityDescription entityForName:@"DayModel" inManagedObjectContext:context];
DayModel *day = [[DayModel alloc] initWithEntity:entity insertIntoManagedObjectContext:context];

if ([day isKindOfClass:[DayModel class]]) {
    NSLog(@"True");
} else {
    NSLog(@"False");
}

输出:

False

我添加了以下代码:

Class objectClass = [day class];
Class classClass = [DayModel class];

在调试器中查看它是我发现的:

打印classClass 的描述会打印“DayModel”。

我不确定这是否相关,但 DayModel 是用 Swift 实现的。


更新

这在我的测试课程中失败了,但在 iOS 应用程序中没有。问题似乎类似于this issue。但是,我已将所有可以添加的类添加到测试目标中,但仍然失败。

【问题讨论】:

  • 不确定,但这可能会有所帮助...stackoverflow.com/a/12161219/2274694
  • 谢谢,我想差不多了。这在测试类中失败,但在应用程序中工作。我已经将所有类添加到目标中......
  • 在模型编辑器中,类名必须是 xxx.DayModel,其中 xxx 是您的应用模块的名称。是这样吗?
  • @jrturton,您的意思是修改 xcdatamodeld 文件,选择 DayModel,然后在右侧的 Utility 面板中更改类名吗?现在它只是 DayModel,如果我像你一样更改它,建议应用程序崩溃。网上有没有可以帮助我的例子?谢谢。
  • 这很有趣。崩溃怎么办?你的模块名称是什么?

标签: ios objective-c core-data restkit


【解决方案1】:

我也遇到了同样的问题。

我的问题实际上不是我在测试项目中丢失了源文件,正如您在更新中提到的链接:isKindOfClass returning NO unexpectedly

根本原因是同一个类的源文件太多。在您的测试目标中,您可能对包含您的应用程序的目标有目标依赖关系,即您已经包含了源文件。

因此,请确保从“构建阶段”选项卡中的测试目标的“编译源”中删除包含您在 isKindOfClass 中使用的类的源文件。

(在你的情况下删除 DayModel.m)

我在这里找到了解决问题的方法: isKindOfClass and NSStringFromClass disagree about UIApplicationDelegate

似乎当有多个具有相同类的源文件时,isKindOfClass 的行为很奇怪,因为它看不到这两个类是相同的。

【讨论】:

  • 感谢@dynamokaj 的建议。但是,如果我从测试目标的编译源中删除 DayModel,则会收到编译错误,因为 DayModel 不再对测试类可见。
【解决方案2】:

几个小时以来我一直在努力解决这个问题,但我在网上只能找到 Targets 的东西。原来我没有在 xcdatamodeld 编辑器中设置“类”字段,当它应该是类的名称时它仍然是“NSManagedObject”......

检查以确保类名在数据模型检查器 (Cmd-Opt-3) 的“名称”字段和“类”字段中。

【讨论】:

    【解决方案3】:

    对于托管对象最好使用这种方式来检查类:

    if ([object.entity.name isEqualToString:NSStringFromClass(MyManagedObjectSubclass.class)]) {
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      • 2011-02-16
      • 2021-07-03
      • 2017-04-02
      • 2015-05-27
      • 2013-08-25
      相关资源
      最近更新 更多