0

我正在尝试使用传递给方法的字符串将数组中的对象转换为该类型并迭代它们。

我的代码如下所示:

- (NSArray *)serializableEntities:(NSArray *)entities forEntityName:(NSString *)entityName
{
    NSMutableArray *seriazliedEntities = [[NSMutableArray alloc] init];

    for (int i=0; i < [entities count]; i++) {

        entityName *entityObj = (entityName *) [entities objectAtIndex:i];

        ...
    }
}

我怎样才能做到这一点?这可能吗?

我试过这样做,但相信我错过了正确的方法/语法:

Class objectClass = NSClassFromString(entityName);
objectClass *myObject = (objectClass *) [entities objectAtIndex:i];
4

2 回答 2

3

(来自我和肯的评论:)这是不可能的。您只能转换为一种类型(这是在编译时已知的)。您可以使用通用的 Objective-C 类型id

id entityObj = [entities objectAtIndex:i];

如果所有对象都有一个共同的超类,使用它:

SuperClass *entityObj = [entities objectAtIndex:i];

或者也许所有对象都符合一个通用协议:

id<CommonProtocol> entityObj = [entities objectAtIndex:i];

当然你可以在运行时检查对象的实际类,例如

id entityObj = [entities objectAtIndex:i];
if ([entityObj isKindOfClass:NSClassFromString(entityName)]) {

}
于 2013-11-09T10:28:18.617 回答
0

关键是使用子类的超类,NSManagedObject而不是试图确定实际的子类。这使我可以删除试图找出它是什么类的代码。这是工作解决方案:

- (NSArray *)serializableEntities:(NSArray *)entities
{
    NSMutableArray *seriazliedEntities = [[NSMutableArray alloc] init];

    for (int i=0; i < [entities count]; i++) {

        NSManagedObject *entityObj = [entities objectAtIndex:i];

        NSMutableDictionary *serializedEntity = [[NSMutableDictionary alloc] init];

        for (NSString *key in [[entityObj entity] attributesByName]) {
            if ([entityObj valueForKey:key]) [serializedEntity setValue:[self nullCheck:[entityObj valueForKey:key]] forKey:key];
        }

        [seriazliedEntities addObject:serializedEntity];
    }

    return seriazliedEntities;
}
于 2013-11-10T15:38:33.533 回答