2015-04-04 57 views
0

我正试图编写代码来简化在内部工具构建中添加新功能的代码。有一个UITableView,每个单元格都是一个功能的按钮,可以延伸到另一个视图中。如何调用一个id类对象的方法?

每个函数都在它自己的类文件中。目前,这是我做这件事的方式。

在视图控制器,I中的方法初始化类,然后我原因请看成其视图控制器

- (void)resetButtonTouched { 
    [ResetClass *reset = [[ResetClass alloc] initWithNumber num]; 
    [self.navigationController pushViewController: reset animated: YES]; 
} 

然后用于的cellForRowAtIndexPath我在didSelectRowAtIndexPath方法创建单元

cell.textLabel.text = @"Reset"; 

然后创建按钮响应

​​

而我这样做的10其他函数,所以

[Function2 * function2 = [[Function2 alloc] initWithNumber num]; [Function3 * function3 = [[Function2 alloc] initWithNumber num];

等等

我想简化这个,所以我只能在一个地方登记类,它会自动增加该小区并连接按钮。对于cellForRowAtIndexPath和didSelectRowAtIndexPath,我可以根据indexPath.row来查看数组。但是,我需要一种方法将类对象存储在数组中,并在调用时初始化它们。

我想我可以有一个被这里加入到有类方法的每个功能会

  • 返回一个标题(为的cellForRowAtIndexPath按钮标题)
  • 的类名(NSClassFromString所以我可以确定数组中的类对象的类)

和一个正常的方法被调用后,初始化完成它的东西。

我想写的东西在那里,如果我只写两行,

ResetFunction *reset; 
[self registerFunction:reset]; 

它会做的一切,我没有以上(创建工作按钮调用类对象)

我m想到有一个数组可以存储所有不同的类对象,称之为allFunctions,而方法runFunction将执行初始化和继续。然后在cellForRowAtIndexPath它会只是

cell.textLabel.text = [allFunctions[indexPath.row] getTitle]; 

和didSelectRowAtIndexPath方法,它会调用[_viewController runFunction:allFunctions[indexPath.row]];

我会怎么做呢?我试图用id *参数创建一个方法,该参数采用类对象,意图将其存储在数组中allFunctions我无法制作将存储所有函数的方法,因为它给了我“隐式转换当我尝试调用[self registerClass:reset]时,不允许ARC使用非目标c指针来自动释放id。

我该怎么办?

回答

2

类对象也是对象。您使用Class变量来保存对类对象的引用,而不是id

Class theClass = [ResetClass class]; 

您可以将它们存储在NSMutableArray中。

[someArray addObject:theClass]; 

以后,您可以检索类和发送消息给它:

Class theClass = someArray[index]; 
id object = [[theClass alloc] init]; 

如果您需要能够查询每类对象为title属性,则需要在每个实施你添加到你的数组中的类。例如,这是一个类方法实现这样的类属性:

Class theClass = someArray[index]; 
NSString* title = [theClass title]; 
// ... code which uses the title ... 

+ (NSString*) title 
{ 
    return @"Blah, blah, blah"; 
} 

你可以使用如下代码获得它

相关问题