填充NSManagedObject时无法识别的选择器

时间:2014-04-21 16:29:26

标签: objective-c core-data nsmanagedobject

我有一个使用Core Data的iPad应用程序。在我的数据模型中,我有一个名为HubBrand的对象,并使用XCode生成了NSManagedObects。生成的对象具有以下代码:

部首:

@class HubModel;

@interface HubBrand : NSManagedObject

@property (nonatomic, retain) NSString * brandName;
@property (nonatomic, retain) NSSet *relModels;
@end

@interface HubBrand (CoreDataGeneratedAccessors)

- (void)addRelModelsObject:(HubModel *)value;
- (void)removeRelModelsObject:(HubModel *)value;
- (void)addRelModels:(NSSet *)values;
- (void)removeRelModels:(NSSet *)values;

@end

实现:

@implementation HubBrand

@dynamic brandName;
@dynamic relModels;

@end

我正在尝试创建HubBrand类的实例并使用以下代码填充它:

HubBrand *brand = [[HubBrand alloc] init];
[brand setBrandName:[NSString stringWithFormat:@"_Custom:, %@", [_txtHubBrand text]]];
//brand.brandName = [NSString stringWithFormat:@"_Custom:, %@", [_txtHubBrand text]];

当我这样做时,我收到以下运行时错误: - [HubBrand setBrandName:]:无法识别的选择器发送到实例

使用生成的托管对象时,我是否需要实现自己的setter?有关为什么我收到此错误的任何线索?谢谢!

2 个答案:

答案 0 :(得分:1)

您需要根据NSManagedObject使用NSManagedObjectContext创建NSEntityDescription子类的实例:

NSManagedObjectContext *managedObjectContext; // Get this from your Core Data stack, probably in the app delegate
HubBrand *brand = [NSEntityDescription insertNewObjectForEntityForName:@"HubBrand" inManagedObjectContext:managedObjectContext];
[brand setBrandName:[NSString stringWithFormat:@"_Custom:, %@", [_txtHubBrand text]]];

有关详细信息,请参阅文档的Creating, Initializing, and Saving a Managed Object部分。

您还可以使用子类初始化程序:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"HubBrand" inManagedObjectContext:managedObjectContext];
HubBrand *brand = [[HubBrand alloc] initWithEntity:entity insertIntoManagedObjectContext:managedObjectContext];

但它有点罗嗦!

答案 1 :(得分:1)

您没有为NSManagedObject调用指定的初始值设定项,因此您无法获取有效对象。您无法使用init创建实例,必须使用initWithEntity:insertIntoManagedObjectContext:。也可以在名为NSEntityDescription的{​​{1}}上使用构造函数。