2011-06-28 21 views
2

如何迭代方法調用,例如。objective C迭代方法調用

[self revertBox1]; 
[self revertBox2]; 
[self revertBox3]; 
[self revertBox4]; 
[self revertBox5]; 

// They are as many as 20. 

example1 * xmp = [[example1 alloc] initWithNibName:@"example1" bundle:nil]; 

// How can I iterate the class instantiation example1, example2, example3 

// If I use this method.. 

NSString *classNameStr = [NSString stringWithFormat:@"example%d", i]; 
Class cls = NSClassFromString(classNameStr); 
cls *obj = [[[cls alloc] initWithNibName:classNameStr bundle:nil]; 

//I receive an error [ Use of undeclared identifier 'obj' ] 

回答

3

如果你想要遍歷方法調用,

for (int i=0; i<20; i++) { 

    NSString *selectorNameStr = [NSString stringWithFormat:@"revertBox%d", i]; 
    SEL sel = NSSelectorFromString(selectorNameStr); 
    [self performSelector:sel]; 
} 

如果你想要遍歷類名,你可以這樣做,

for (int i=0; i<20; i++) { 

    NSString *classNameStr = [NSString stringWithFormat:@"example%d", i]; 
    Class cls = NSClassFromString(classNameStr); 
    cls *obj = [[[cls alloc] initWithNibName:classNameStr bundle:nil]; 
} 
+1

聰明,但user797819真的只是需求重新分解他的原始代碼和聲明。 –

+0

@科爾曼斯塔維什,是的。他應該。 – EmptyStack

+0

---- NSString * classNameStr = [NSString stringWithFormat:@「example%d」,i]; ---- Class cls = NSClassFromString(classNameStr); ---- cls * obj = [[[cls alloc] initWithNibName:classNameStr bundle:nil]; //使用未聲明的標識符'obj' –

4

你應該重新審視自己的設計和方法來此......而不必20名的方法的-revertBoxN,怎麼樣讓一個方法:

- (void)revertBox:(int)index { } 

你會那麼必須更換的名單具有特定大小的C數組的ivars(exampleN)。

您可以使用簡化循環遍歷元素並避免重複的代碼。

希望你能跟着我在說什麼......我不認爲我應該進入更詳細的(否則你應該學習Objective-C的基礎知識(包括!C)。

+0

+1更好的設計。 –