2013-02-13 143 views
1

我有一类为NSManagedObjectContext,这将插入在另一个NSManagedObjectContext返回项目NSManagedObject动态类型转换在运行时

@implementation NSManagedObjectContext (GTEntity) 

- (id)addEntity:(id)entity { 
    NSManagedObject *entityObject = [self objectWithID:[entity objectID]]; 
    return entityObject; 
} 

@end 

我的问题是我怎么返回对象相同的类型我有。我的意思是,如果我拨打[ctx addEntity:city]City *city,其中城市是NSManagedObject子类,我想在其他上下文中获取对象,但是类型相同,而不是NSManagedObject类型。这种类型是通用的,应该在实体运行时确定,如objc_getClass(entity)。我发现了一些宏,但它有一些奇怪的错误Expected "]"(cls *)后:

#define objc_dynamic_cast(obj, cls) \ 
([obj isKindOfClass:(Class)objc_getClass(#cls)] ? (cls *)obj : NULL) 

回答

1

只是做City *city = [someManagedObjectContext addEntity:someCityObject];假设CityNSManagedObject派生。你的返回变量将被动态地转换。虽然我不相信有什么可以从中得到一个类别,但你可以直接这样做:

City *city = [someManagedObjectContext objectWithID:[someCityObject objectID]];