我的 NSManagedObject 有 2 To-Many 关系,但只有一个可以返回正确的类信息
Posted
技术标签:
【中文标题】我的 NSManagedObject 有 2 To-Many 关系,但只有一个可以返回正确的类信息【英文标题】:My NSManagedObject has 2 To-Many relationship, but only one can return correct class information 【发布时间】:2011-08-04 16:07:52 【问题描述】:我的 NSManagedObject 说 Tag 有 2 To-many 关系,说 post 和 children。我让 Xcode 4 为其生成 NSManagedObject 子类。但我发现只有一种关系可以返回正确的类信息。
所以代码如下所示,甚至这些代码都是由xcode生成的,你可以立即发现错误,
@interface Tag : NSManagedObject
@private
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSSet* children;
@property (nonatomic, retain) NSSet* posts;
@end
...
- (void)addChildrenObject:(NSManagedObject *)value
NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
[self willChangeValueForKey:@"children" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[[self primitiveValueForKey:@"children"] addObject:value];
[self didChangeValueForKey:@"children" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[changedObjects release];
- (void)addPostsObject:(Post *)value
NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
[self willChangeValueForKey:@"posts" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[[self primitiveValueForKey:@"posts"] addObject:value];
[self didChangeValueForKey:@"posts" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[changedObjects release];
所以你可以发现对于 Post,它是 - (void)addPostsObject: (Post *) value 但是对于 SubTab,它是 - (void)addChildrenObject:(NSManagedObject *) value // value 不是 SubTag
我尝试检查帖子和孩子的元素,看看他们是否可以返回正确的班级信息。他们没有。
Tag* data = ...
NSObject *a = [tmp.posts anyObject];
NSString *className = NSStringFromClass([a class]);
NSLog(@"I am a %@",className); //it says Post correctly.
Tag* data = ...
NSObject *a = [tmp.children anyObject];
NSString *className = NSStringFromClass([a class]);
NSLog(@"I am a %@",className); //it says **NSManagedObject** instead of **SubTag**
即使我把 - (void)addChildrenObject:(NSManagedObject *)value 改成了 - (void)addChildrenObject:(SubTag *)value,结果还是一样的。
我真的不知道为什么。有人可以解释一下吗?
非常感谢!
【问题讨论】:
【参考方案1】:我删除了xcode为我生成的原始SubTag,让xcode再次生成,问题就解决了。
我不知道为什么,但没有打扰。
【讨论】:
以上是关于我的 NSManagedObject 有 2 To-Many 关系,但只有一个可以返回正确的类信息的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的类没有 NSManagedObject 属性时会出现错误?
删除 NSManagedObject 子类不会取消它的多对多关系