10

我尝试扩展 NSManagedObject。使用 XCode 我创建了 MyBox.m 和 MyBox.h(直接来自 xcdatamodel 文件)。

然后我修改了这些文件:

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>


@interface MyBox : NSManagedObject

@property (nonatomic, retain) NSDate * endDate;
@property (nonatomic, retain) NSNumber * globalId;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSDate * startDate;

-(NSString *)sayHello;

@end

#import "MyBox.h"
@implementation MyBox

@dynamic endDate;
@dynamic globalId;
@dynamic name;
@dynamic startDate;

-(NSString *)sayHello {
    return @"hello";
}  

@end

我可以获取所有 myBoxes

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription
                                   entityForName:@"MyBox" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];

NSMutableArray *myBoxes = [context executeFetchRequest:fetchRequest error:&error];

但后来我打电话

MyBox *myBox = [myBoxes objectAtIndex:indexPath.row];    
    [myBox sayHello];

它编译但我得到

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSManagedObject sayHello]: unrecognized selector sent to instance 0x8e73fc0'

如果我只读取一个值

NSLog(@"%@", myBox.name);

有用

我在这里发现了类似的问题,但没有解决方案。谢谢你的帮助。

4

5 回答 5

21

我刚遇到同样的问题。通过将类名更改为我的 NSManagedObject 子类的名称来解决它myApp.xcdatamodeld -> configurations -> default -> entities -> myEntity

于 2014-01-30T11:56:34.893 回答
4

假设您在MyBox实体上正确设置了类名,我猜该应用程序具有旧版本的 Core Data 托管对象模型。清理您的构建并删除模拟器/设备上的应用程序以进行良好的测量。为了 100% 确定,还要删除您的派生数据文件夹。

如果在那之后它不起作用,我敢打赌你没有正确设置实体类名称。打印出你的NSEntityDescription并确保它是你所期望的。

于 2013-07-23T15:22:02.610 回答
1

对于 Swift 5.0

以这种方式创建 CoreData 对象时会出现此问题:

let object = CoreDataClass()
print(object.someProperty) // this is emit crash
于 2020-06-16T08:24:50.783 回答
0

我在 xcdatamodeld 中设置了正确的类名,但我没有在目标中包含该类的 .m 文件。我必须单击左侧边栏上的 .m,然后选中右侧边栏中 Target Membership 下的正确框。

于 2017-07-12T18:16:50.370 回答
0

错误的 Xcdata 模型。

我有错误的 xcdatamodel。这是一个超级愚蠢的错误,但是当您假设最新模型是 27 但您的同事将其更改为 28 并且您将属性添加到模型 27 时,它会发生。您遇到此类错误并且您认为这是您的核心数据模型有问题但这只是您的 xcdatamodel 编号。

一定要爱编程=_=。

于 2018-08-06T21:07:23.700 回答