【问题标题】:objective C Iterate Method Call目标C迭代方法调用
【发布时间】:2011-09-24 00:43:15
【问题描述】:

例如,我如何迭代方法调用。

[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' ] 

【问题讨论】:

    标签: iphone objective-c ios methods call


    【解决方案1】:

    您应该重新考虑您的设计和方法...与其拥有 20 个方法名称 -revertBoxN,不如创建一个方法:

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

    然后,您必须将您的 ivars (exampleN) 列表替换为特定大小的 C 数组。

    您可以使用简洁的循环来遍历元素并避免重复代码。

    希望你能听懂我说的……我认为我不必详细介绍(否则你应该学习 Objective-C 的基础知识(包括 C!)。

    【讨论】:

      【解决方案2】:

      如果你想迭代方法调用,

      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];
      }
      

      【讨论】:

      • 聪明,但 user797819 真的只需要稍微重构他的原始代码和声明。
      • ---- NSString *classNameStr = [NSString stringWithFormat:@"example%d", i]; ---- 类 cls = NSClassFromString(classNameStr); ---- cls *obj = [[[cls alloc] initWithNibName:classNameStr bundle:nil]; //使用未声明的标识符'obj'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      相关资源
      最近更新 更多