Мой NSManagedObject имеет отношение 2 к - Множество ,, но только один может вернуть правильную информацию о классе - PullRequest
0 голосов
/ 04 августа 2011

Мой 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];

}

Таким образом, вы можете найти, чтодля Post это - - (void) addPostsObject: (Post *) значение, но для SubTab это - (void) addChildrenObject: (NSManagedObject *) 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 *) значение на - (void) addChildrenObject: (SubTag *) значение, результат тот же.

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

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

1 Ответ

0 голосов
/ 05 августа 2011

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

Не знаю почему, но не стал.

...