我有一个班级X
和几个班级X1,X2,X3,X4
,他们是X
我有一个NSArray
的类名,我正在用它来迭代:
_classnames = @[@"X1",@"X2",@"X3",@"X4"];
然后:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString * identifier = @"cellId";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier
forIndexPath:indexPath];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:identifier];
}
X * xshared = [NSClassFromString(_classnames[indexPath.row]) shared];
cell.textLabel.text = [xshared title];
return cell;
}
修改: 有趣的是:
for (NSString * s in _classnames) {
NSLog(@"%@",NSClassFromString(s));
}
在tableView
电话
然后所有NSClassFromString
都会返回班级X1
我错过了什么吗?
答案 0 :(得分:2)
我发现了错误,我只是为了完成而在这里发帖。
在课程X
中,我宣称shared
为
+ (instancetype)shared {
static id _shared = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_shared = [self new];
});
return _shared;
}
我没有在子类中实现shared
。
向子类添加shared
解决了这个问题。它返回的原因总是第一个实例化的类是非常明显的,但我没有看到。