Мой 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 *) значение, результат тот же.
Я действительно не могу понять, почему.Может кто-нибудь пролить свет на это?
Большое спасибо!