我正在尝试编写代码,以简化内部工具构建中新功能的添加。有一个UITableView,每个单元格都是一个按钮,可以进入另一个视图。
每个函数都在自己的类文件中。目前,这就是我这样做的方式。
在视图控制器中,我在方法中初始化类,然后我进入其视图控制器
- (void)resetButtonTouched {
[ResetClass *reset = [[ResetClass alloc] initWithNumber num];
[self.navigationController pushViewController: reset animated: YES];
}
然后对于cellForRowAtIndexPath我创建单元格
cell.textLabel.text = @"Reset";
然后在didSelectRowAtIndexPath中创建按钮响应
[_viewController resetButtonTouched];
我为其他10个函数执行此操作,所以
[Function2 * function2 = [[Function2 alloc] initWithNumber num]; [Function3 * function3 = [[Function2 alloc] initWithNumber num];
等...
我想简化这个,所以我只需要在一个地方注册一个类,它会自动添加单元格并连接按钮。对于cellForRowAtIndexPath和didSelectRowAtIndexPath,我可以让它基于indexPath.row查看数组。但是,我需要一种方法将类对象存储在一个数组中,并在调用时初始化它们。
我想我可以将所有添加到此处的函数都添加到
的类方法中和初始化后要调用的常规方法。
如果我只写这两行,我想写点什么,
ResetFunction *reset;
[self registerFunction:reset];
它将完成我上面所做的一切(创建一个调用该类对象的工作按钮)
我正在考虑使用一个数组来存储所有不同的类对象,称之为allFunctions
,以及一个方法runFunction
,它将执行初始化和segueing。然后在cellForRowAtIndexPath
中,它只是
cell.textLabel.text = [allFunctions[indexPath.row] getTitle];
在didSelectRowAtIndexPath中,它将调用[_viewController runFunction:allFunctions[indexPath.row]];
我该怎么做?我尝试使用id *
参数创建一个方法,该方法接受类对象,目的是将其存储在数组allFunctions
中,我在制作一个存储所有函数的方法时遇到了麻烦,因为当我尝试调用[self registerClass:reset]时,它给了我“用ARC禁止非客观c指针到autoreleasing id的隐式转换”。
我该怎么办?
答案 0 :(得分:3)
类对象也是对象。而不是id
,而是使用Class
变量来保存对类对象的引用。
Class theClass = [ResetClass class];
您可以将这些内容存储在NSMutableArray
。
[someArray addObject:theClass];
您可以稍后检索该类并向其发送消息:
Class theClass = someArray[index];
id object = [[theClass alloc] init];
如果您需要能够查询title
属性的每个类对象,则需要在添加到数组的每个类上实现。例如,这是一个实现这种类属性的类方法:
+ (NSString*) title
{
return @"Blah, blah, blah";
}
您可以使用以下代码获取它:
Class theClass = someArray[index];
NSString* title = [theClass title];
// ... code which uses the title ...