NSManagedObject 无法识别的选择器发送到实例
Posted
技术标签:
【中文标题】NSManagedObject 无法识别的选择器发送到实例【英文标题】:NSManagedObject unrecognized selector sent to instance 【发布时间】:2013-08-06 07:06:04 【问题描述】:我有一个如下的核心数据模型,其中 children 是一对多关系。
.h
@implementation MyEntity
@dynamic name;
@dynamic children;
@end
.m
@interface MyEntity : NSManagedObject
@property (nonatomic) NSString *name;
@property (nonatomic) NSOrderedSet *children;
@end
然后我尝试使用:
MYAppDelegate *delegate = (MYAppDelegate *)[UIApplication sharedApplication].delegate;
NSManagedObjectContext *managedObjectContext = [delegate managedObjectContext];
NSEntityDescription *categoryEntity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext];
NSManagedObject *newCategory = [[NSManagedObject alloc] initWithEntity:categoryEntity insertIntoManagedObjectContext:managedObjectContext];
[newCategory setValue:key forKey:@"name"];
NSOrderedSet *testSet = [[NSOrderedSet alloc] initWithArray:@[@"This", @"is", @"a", @"test"]];
[newCategory setValue:testSet forKey:@"children"];
但在最后一行,我得到了这个错误:
NSCFConstantString managedObjectContext]:发送了无法识别的选择器 到实例 0xe8fa0'
如果我将NSOrderedSet
更改为NSSet
,编译器会抱怨它需要NSOrderedSet
。
如何将集合分配给NSManagedObject
?
【问题讨论】:
【参考方案1】:问题不在于NSOrderedSet
,而是您放入集合中的NSString
实例。这些需要替换为在关系目的地的数据模型中配置的实体的实例。你不能用错误的对象来填充关系。
【讨论】:
NSManagedObject
代表一个类别。该类别与自身具有一对多关系,因为我使用的是类别的递归层次结构。看来NSOrderedSet
的元素应该是MyEntity
的实例。但是我怎样才能创建那些对象和孩子呢?我是否需要使用首先填充子实体的算法?
因为这是一个测试,只需 alloc] initWithEntity:categoryEntity
一个新的实体实例并将其放入集合中。以上是关于NSManagedObject 无法识别的选择器发送到实例的主要内容,如果未能解决你的问题,请参考以下文章
NSManagedObject 子类 - 发送到实例的无法识别的选择器
发送到实例错误的核心数据无法识别的选择器:并且无法在 NSManagedObject 类上调用指定的初始化程序
swift coredata - 发送到实例的无法识别的选择器
NSSortDescriptor 和 [__NSCFNumberlocalizedStandardCompare:]:发送到实例的无法识别的选择器