1

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

@implementation NSManagedObjectContext (GTEntity)

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

@end

我的问题是我如何返回与我拥有的相同类型的对象。我的意思是,如果我调用[ctx addEntity:city]with 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)
4

1 回答 1

1

只需City *city = [someManagedObjectContext addEntity:someCityObject];假设City派生自NSManagedObject. 您的返回变量将被动态转换。虽然我不相信从中创建一个类别有什么好处,但你可以直接这样做:

City *city = [someManagedObjectContext objectWithID:[someCityObject objectID]];
于 2013-02-13T01:36:26.763 回答