Мой NSManagedObject имеет отношения 2 To-Many, но только один может вернуть правильную информацию о классе

Мой NSManagedObject говорит, что у тега есть отношения 2 ко многим, говорит сообщения и дети. И я позволил 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];

}

Таким образом, вы можете обнаружить, что для сообщения это - (void)addPostsObject: (Post *) значение, но для SubTab это - (void)addChildrenObject: (NSManagedObject *) значение // значение НЕ является вложенным тегом

И я попытался проверить элемент сообщений и детей, чтобы увидеть, могут ли они вернуть правильную информацию о классе. И они НЕ сделали.

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, результат тот же.

Я действительно не могу понять, почему. Может ли кто-нибудь пролить свет на это?

Большое спасибо!


person Qiulang    schedule 04.08.2011    source источник


Ответы (1)


Я удалил исходный SubTag, сгенерированный для меня xcode, и снова сгенерировал xcode, и проблема была решена.

Не знаю почему, но не заморачивался.

person Qiulang    schedule 05.08.2011