-1

我有一个 UISwitches 的 NSArray。我分别有一个 NSDictionary,其键是 NSNumber,其对象是 NSString 对象形式的 BOOL 值。我想做的是遍历 UISwitches 的 NSArray,检查标签值是否是 NSDictionary 内部的键之一,如果找到匹配项,则将 UISwitch 的 enabled 属性设置为键的对应对象(在将其从 NSString 转换为 BOOL 之后)。

我的代码如下:

for (int i=0; i<[self.switchCollection count]; i++) {
     UISwitch *mySwitch = (UISwitch *)[self.switchCollection objectAtIndex:i];
     if (tireSwitch.tag == //this has to match the key at index i) {
                    BOOL enabledValue = [[self.myDictionary objectForKey:[NSNumber numberWithInt://this is the key that is pulled from the line above]] boolValue];
                    mySwitch.enabled = enabledValue;
     }
 }
4

2 回答 2

2

既然 Duncan C 的答案已经明确了您要完成的工作,那么可以更简单地编写它。

直接迭代数组。您根本不需要i,因为您没有使用它来访问数组以外的任何内容。

对于每个开关,尝试使用tag(这被包装在NSNumber使用@()装箱语法的字典中。

如果存在值,则设置开关的enabled.

for( UISwitch * switch in self.switchCollection ){
    NSString * enabledVal = self.myDictionary[@(switch.tag)];
    if( enabledVal ){
        switch.enabled = [enabledVal boolValue];
    }
}
于 2014-01-24T20:09:19.183 回答
1

您的代码看起来不正确。这个怎么样:

(编辑为使用快速枚举(for...in 循环语法)

//Loop through the array of switches.
for (UISwitch *mySwitch  in self.switchCollection) 
{
     //Get the tag for this switch
  int tag = mySwitch.tag;

  //Try to fetch a string from the dictionary using the tag as a key
  NSNumber *key = @(tag);
  NSString *dictionaryValue = self.myDictionary[key];

  //If there is an entry in the dictionary for this tag, set the switch value.
  if (dictionaryValue != nil) 
  {
    BOOL enabledValue = [dictionaryValue boolValue];
    mySwitch.enabled = enabledValue;
  }
}

那是假设我了解您要做什么...

于 2014-01-24T20:00:26.733 回答