NSManagedObject失败isKindOfClass测试

rob*_*rob 5 core-data objective-c ios restkit

我有一个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");
}
Run Code Online (Sandbox Code Playgroud)

输出:

False
Run Code Online (Sandbox Code Playgroud)

我添加了以下代码:

Class objectClass = [day class];
Class classClass = [DayModel class];
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

打印classClass打印"DayModel" 的描述.

我不确定这是否相关,但DayModel是在Swift中实现的.


UPDATE

这在我的测试类中失败了,但在iOS应用程序中没有.问题似乎与此问题类似.但是,我已经将所有类都添加到了测试目标中,但它仍然失败了.

dyn*_*kaj 5

我刚遇到同样的问题.

在我的情况下的问题实际上并不是我错过了测试项目中的源文件,正如您在更新中提到的链接:isKindOfClass意外返回NO

根本原因是由于太多源文件具有相同的类.在您的测试目标中,您可能对包含应用程序的目标具有目标依赖性,即您已经包含源文件.

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

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

我在这里找到了我的问题的解决方案: isKindOfClass和NSStringFromClass不同意UIApplicationDelegate

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