我有一个使用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?有关为什么我收到此错误的任何线索?谢谢!
答案 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}}上使用构造函数。