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