2013-02-13 2 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]; предполагая City происходит от NSManagedObject. Ваша возвращаемая переменная будет динамически выбрана. Хотя я не верю, что от создания какой-либо категории ничего не получится, вы можете просто сделать это прямо так:

City *city = [someManagedObjectContext objectWithID:[someCityObject objectID]]; 
Смежные вопросы