【问题标题】:Find Dictionary Key inside and Array of Dictionaries在字典中查找字典键和字典数组
【发布时间】:2013-05-01 13:39:23
【问题描述】:

我有一个包含多个 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"]。如何记录第三个索引的日期?

希望这是有道理的

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

}

感谢所有快速帮助!

【问题讨论】:

    标签: ios nsmutablearray nsmutabledictionary


    【解决方案1】:
    for(int i =0 ;i <[array count];i++)
    {
      NSLog(@"%@",[[array objectAtIndex:i]allKeys]);
     }
    

    这个方法会打印所有的键

    【讨论】:

    • 是的,这就是我要找的。​​span>
    【解决方案2】:

    首先你必须在每次向数组添加新对象时分配一个新字典,否则你的字典将只保存最后一个值,所以

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

    【讨论】:

      【解决方案3】:

      试试

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

      【讨论】:

        【解决方案4】:

        您混淆了实例变量和局部变量,并且没有在循环中正确更新。

        理想情况下:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-05
          • 2019-08-06
          • 2020-12-15
          • 2021-12-11
          • 1970-01-01
          • 2012-04-05
          相关资源
          最近更新 更多