我的 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 属性时会出现错误?

删除 NSManagedObject 子类不会取消它的多对多关系

NSManagedObject 子类属性

为啥我的 ivar 没有在 NSManagedObject 子类上设置

创建 NSManagedObject 子类,创建名为我的项目的类