使用类名转换为类

时间:2014-02-22 15:20:21

标签: ios objective-c

我想通过字符串值转换为类类型。

    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {

        Class class = [self class];
        NSString *className = NSStringFromClass(class);

        NSArray* nibContents = [[NSBundle mainBundle] loadNibNamed:className owner:self options:NULL];
        NSEnumerator* nibEnumerator = [nibContents objectEnumerator];
        NSObject* nibObject = nil;
        while ((nibObject = [nibEnumerator nextObject]) != nil) {
            if ([nibObject isKindOfClass:class]) {
                self = nibObject; // <<< compiler warning
                break;
            }
        }
    }

    return self;
}

此代码是UITableViewCell超类的一部分。我有一大堆UITableViewCell子类,他们都希望使用上面的代码片段加载自己的nib。这工作得很好,但我在self = nibObject。

行上有一个编译器警告

我想抑制编译器警告,但这需要按照

的方式进行转换
self = (className *)nibObject;

那么我怎么能在我的超类中做到这一点所以我不必在每个子类中重复上面的片段并按照惯例进行转换?

1 个答案:

答案 0 :(得分:2)

如果您完全确定类是兼容的,那么将其转换为id

self = (id)nibObject;

(自我也以id的形式返回)