在字典数组中查找字典键值

3
我有一个包含多个 NSMutableDictionary 的数组。
每当填写文本字段并按下提交按钮时:
//The strings
NSString *dateString = @"Date";
NSString *timeString = @"Time";
NSString *typeString = @"Type";

- (IBAction)addData:(id)sender {

[_myDictionary setObject:_dateLabel.text forKey:dateString];
[_myDictionary setObject:_nNumber.text forKey:timeString];
[_myDictionary setObject:_type.text forKey:typeString];

[_myArray addObject:_myDictionary];

[self display]
}

我想在UItextView中显示结果(例如日期),但是我不知道该怎么做。

    -(void)displayData{

    for (int i = 0; i<_myArray.count; i++) {
        [_myArray objectAtIndex:i];
        outputString = [outputString stringByAppendingFormat:@"%@\n",[_myDictionary objectForKey:@"Date"]];

    }
    _myTextView.text = [NSString stringWithFormat:@"%@",outputString];

}

这将显示数组中最后一个字典的日期。我甚至找不到如何记录特定字典的日期。
假设使用[_myArray objectAtIndex:3] [_myDictionary objectForKey:@"Date"]。如何记录索引为3的日期?
希望这样说有意义。
EDIT SOLUTION

for (int i = 0; i<_myArray.count; i++)
    {

        outputString = [outputString stringByAppendingFormat:@"%@ %@\n",[[_myArray objectAtIndex:i]objectForKey:@"Date"], [[_myArray objectAtIndex:i]objectForKey:@"Time"]];

    }
    _myTextView.text = [NSString stringWithFormat:@"%@",outputString];

}

感谢您提供的所有快速帮助!!
4个回答

6
for(int i =0 ;i <[array count];i++)
{
  NSLog(@"%@",[[array objectAtIndex:i]allKeys]);
 }

这个方法将打印所有的键:

1

首先,每当您向数组添加新对象时,都必须分配一个新字典,否则您的字典将仅保留最后一个值。

 - (IBAction)addData:(id)sender 
 {

   NSMutableDictionary *_myDictionary=[[NSMutableDictionary alloc] init];

   [_myDictionary setObject:_dateLabel.text forKey:dateString];
   [_myDictionary setObject:_nNumber.text forKey:timeString];
   [_myDictionary setObject:_type.text forKey:typeString];

   [_myArray addObject:_myDictionary];

   [self display]
}

现在展示数值的部分
-(void)displayData
{
   for (int i = 0; i<_myArray.count; i++) 
  {
      NSMutableDictionary *dictionary = [_myArray objectAtIndexPath:i];

      outputString = [outputString stringByAppendingFormat:@"%@\n",[dictionary objectForKey:@"Date"]];

   }
   _myTextView.text = [NSString stringWithFormat:@"%@",outputString]; 

}

0

尝试

-(void)displayData{
    NSMutableString *outputString = [NSMutableString string];
    for (NSDictionary *dict in _myArray) {
        [outputString stringByAppendingFormat:@"%@\n",dict[@"Date"]];
    }

    _myTextView.text = [NSString stringWithString:outputString];
}

0
你把实例变量和局部变量搞混了,在循环中没有正确更新。
理想情况下:
  1. myArray将成为一个实例变量(就像现在一样)。
  2. myDictionary将成为您需要它的每个方法中的局部变量。
这将区分您的持久数据和工作数据。
改为尝试这个:
NSString *dateString = @"Date";
NSString *timeString = @"Time";
NSString *typeString = @"Type";

- (IBAction)addData:(id)sender {

    NSMutableDictionary *dict = [NSMutableDictionary dictionary];

    [dict setObject:_dateLabel.text forKey:dateString];
    [dict setObject:_nNumber.text forKey:timeString];
    [dict setObject:_type.text forKey:typeString];

    [_myArray addObject:dict];

    [self display]
}


-(void)displayData{

    NSString *outputString = @"";

    for (int i = 0; i<_myArray.count; i++) {
        NSDictionary *dict = [_myArray objectAtIndex:i];
        outputString = [outputString stringByAppendingFormat:@"%@\n",[dict objectForKey:@"Date"]];
    }

    _myTextView.text = outputString;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接