使用for循环从NSArray获取值

Hur*_*rkS 1 for-loop objective-c nsdictionary nsarray ios

我已经创建了一个NSStrings数组,它结合了我从另一个原始NSArray中获得的NSDictionary的两个元素,我已经在UITableView中进行了显示/排序.

然后使用原始的NSArray,当用户触摸一个单元并启动didSelectCellAtIndexPath函数时,我想将cell.textLabel.text与修改后的NSArray中的NSString进行比较,然后使用数组计数器我想分配原始的NSDictionary数组到singleEntryArray.

我已经尝试了自己,但我一直将null返回到NSDictionary,但我不确定为什么.

for (int i=0; [[modifiedArray objectAtIndex:i] isEqualToString:cell.textLabel.text]; i++) {
                singleEntryArray = [originalArray objectAtIndex:i];
            }
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

GoZ*_*ner 5

谓词for必须是真实的才能继续.例如,通常:

   for (i = 0; i < 10; i++) ...
Run Code Online (Sandbox Code Playgroud)

在你的情况下,你可能在第一次迭代时没有得到真,因此singleEntryArray是未分配的.

试试这样:

  int i = 0;
  for (NSString *obj in modifiedArray)
    if ([obj isEqualToString: cell.textLabel.text])
      break;
    else 
      i++;
  /* Value of 'i' is index into array.  Caution if not found! */
  singleEntryArray = [originalArray objectAtIndex: i];
Run Code Online (Sandbox Code Playgroud)

[编辑]正如@chuck指出的那样.以上更方便地表达为

int i = [modifiedArray indexOfObject: cell.textLabel.text];
singleEntryArray = (i == NSNotFound ? NULL : [originalArray objectAtIndex: i]);
Run Code Online (Sandbox Code Playgroud)

  • @HurkNburkS:该循环可以压缩为`int i = [modifiedArray indexOfObject:cell.textLabel.text];`,它将通过将`i`设置为NSNotFound来帮助指示是否找不到该对象. (3认同)