NSManagedObject子类 - 发送到实例的无法识别的选择器

时间:2014-04-14 01:16:25

标签: ios objective-c core-data

我有一个从xcdatamodeld生成的Core Data类ZSShotCD(是的,我已经在模型中正确设置了类)。我不想在那里放任何自定义方法,因为我可能需要在某个时间重新生成,所以我将其子类化为ZSShot。以下是一些相关内容:

首先,生成的类:

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

@interface ZSShotCD : NSManagedObject

@property (nonatomic, retain) NSString * shotDescription;
@property (nonatomic, retain) NSString * shotType;

@end

.m文件是你所期望的,带有一堆@dynamic声明属性。我根本没有弄乱它。

现在为子类 - ZSShot.h:

#import <Foundation/Foundation.h>
#import "ZSShotCD.h"

@interface ZSShot : ZSShotCD
- (NSString *)MainText;
@end

.m文件:

#import "ZSShot.h"

@implementation ZSShot

- (NSString *)MainText
{
    NSString *mainText = [NSString stringWithFormat:@"%@ %@", [self valueForKey:@"shotType"], [self valueForKey:@"shotDescription"]];
    return mainText;
}

当我尝试在ZSShot的实例上调用MainText方法时,如下所示:

cell.shotDescriptionLabel.text = [item MainText];

我明白了:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ZSShotCD MainText]: unrecognized selector sent to instance 0x8d130c0'

该实例(单元格)对实体中定义的属性没有任何问题(它正在从Core Data中提取数据)并且我使用的代码基本上与在其他实体上构建的类上使用的代码相同 - 唯一不同的是我尝试使用子类中定义的方法。

任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:4)

您需要为xxx.xcdatamodeld中的实体设置类,如下所示: enter image description here

(UserInfo是UserBase的子类,它是一个NSManagedObject类。)

或者您将获得一个没有您调用方法的基类实例。