运行时动态类型转换

时间:2013-02-13 01:22:25

标签: objective-c

我有一个NSManagedObjectContext类别,它在另一个NSManagedObject中插入NSManagedObjectContext并返回项目:

@implementation NSManagedObjectContext (GTEntity)

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

@end

我的问题是我如何返回与我相同类型的对象。我的意思是,如果我用[ctx addEntity:city]调用City *city,其中City是NSManagedObject子类,我想在其他上下文中获取对象但是相同类型,而不是{{1 }类型。此类型是通用的,应在运行时从实体确定,如NSManagedObject。我找到了一些宏,但在objc_getClass(entity)之后有一些奇怪的错误Expected "]"

(cls *)

1 个答案:

答案 0 :(得分:1)

City *city = [someManagedObjectContext addEntity:someCityObject];假设City来自NSManagedObject。您的返回变量将被动态转换。虽然我不相信从中创建一个类别可以获得任何东西,但你可以直接这样做:

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