【发布时间】:2012-11-12 05:37:39
【问题描述】:
假设我有一个NSManagedObject 的子类,称为MBManagedSquare 和MBManagedCircle。一个MBManagedSquare和MBManagedCircle定义了一个方法prepareFromDictionary:(NSDictionary*)dic,它们的实现是不同的。
假设我有这个代码:
NSString *type = // could be @"MBManagedSquare" or @"MBManagedCircle"
NSEntityDescription *desc = [NSEntityDescription entityForName:type inManagedObjectContext:_context];
NSManagedObject *object = [[NSManagedObject alloc] initWithEntity:desc insertIntoManagedObjectContext:_context];
因此,Core Data 的实体类型是通过type 字符串动态确定的。所以我只知道这是一个NSManagedObject。
我想做的是为正确的类调用prepareFromDictionary: 方法。
所以如果类型是“MBManagedSquare”,我想将对象转换为MBManagedSquare,然后调用
[castedObject prepareFromDictionary:dic];
我尝试做的是:
Class class = NSClassFromString(type);
class *castedObject = (class*)object;
但我得到一个预期的表达式错误。我不确定这是否可能。我该怎么做?
【问题讨论】:
-
您正在将 iVar 转换为 iVar。这很奇怪。在强制转换中使用大写 Class,并去掉取消引用运算符 (*)。当然重点是没有实际意义的,考虑到所有对象都会响应
-class -
@CodaFi 这也不起作用:
Class class = NSClassFromString(type); class *castedObject = (Class)object;
标签: objective-c oop class core-data objc-protocol