【问题标题】:Access an array according to a NSString's value [duplicate]根据 NSString 的值访问数组 [重复]
【发布时间】:2013-05-09 04:20:18
【问题描述】:

在我的应用程序中,用户有十二个可用按钮,我定义了十二个NSMutableArrays。如果用户点击按钮一,应用程序应该计算Comp1数组中的对象数,或者如果用户点击按钮二,应用程序应该计算Comp2数组中的对象数,依此类推。

当用户单击一个按钮时,我将各个 NSMutableArray 的名称保存在 NSString 中——例如,myString = @"Comp1"。我的问题是,如何用myString“定义”NSMutableArray 名称?

我希望有这样的方法:[NSMutableArray arrayWithTitle:myString]

【问题讨论】:

标签: objective-c string variables


【解决方案1】:

创建一个包含数组的字典。字典键将是您要查找的标题。

例如,将 button1 的数组插入到字典中,当您要检索计数时使用:

NSInteger count = [myDictionary[@"Comp1"] count];

【讨论】:

  • 你领先我几分钟...这是迄今为止最好的方法
  • @katzenhut 拥有超过 3 个名称中带有索引后缀的变量很少是做任何事情的最佳方式。
  • @DrummerB 这接近于“根据 NSString 的值访问数组”是合理的。
【解决方案2】:

如果数组是某个对象(您的视图或视图控制器)的属性,您可以使用KVC 来获取它:

NSArray *myArray = [self valueForKey:myString];

但这确实是不好的做法。为什么不将所有按钮放入一个数组中。将您的NSMutableArrays 放入第二个相同大小的数组中。然后你可以通过索引来引用它们。

在您的标题中:

@property (nonatomic) NSArray *buttons;
@property (nonatomic) NSArray *arrays;

在您的实现中,在创建按钮或从 nib 文件加载它们之后(因此这可能应该进入 viewDidLoadawakeFromNib):

self.button = @[button1, button2, button3 ... ];
self.arrays = @[array1, array2, array3 ... ];

然后,当用户点击按钮时:

- (IBAction)buttonTapper:(id)sender {
    UIButton *button = (UIButton *)sender;
    NSUInteger index = [self.buttons indexOfObject:button];
    NSMutableArray *theArray = [self.arrays objectAtIndex:index];
    // do something with the selected array.
}

【讨论】:

    猜你喜欢
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 2014-05-30
    • 2017-11-17
    • 2021-10-25
    • 2020-08-07
    • 2023-04-04
    相关资源
    最近更新 更多