NSMutableDictionary - 使用allKeysforObject不检索数组值

时间:2012-06-26 11:32:01

标签: ios objective-c

NSMutableDictionary *expense_ArrContents = [[NSMutableDictionary alloc]init];
for (int i = 1; i<=4; i++) {
    NSMutableArray *current_row = [NSMutableArray arrayWithObjects:@"payer_id",@"Expense_Type_id",@"Category_Id",@"SubCategory_Id",nil];
    [expense_ArrContents setObject:current_row forKey: [NSNumber numberWithInt:i]];
}
NSArray *newArray = [expense_ArrContents allKeysForObject:@"payer_id"];
NSLog(@"%@",[newArray description]);

我想获取包含特定对象的键值列表,该对象位于存储在nsmutabledictionary中的值数组中,用于特定键。

3 个答案:

答案 0 :(得分:1)

在获取所有键([expense_ArrContents allKeysForObject:@"payer_id"];)的行中,您实际获得的对象不是任何数组项中的对象。此@"player_id"与您在@"player_id"中添加的current_row不同。实际上,也许你的所有行都有不同的@"player_id"对象(除非编译器进行了一些优化 - 可能会威胁到与一个对象相同的字符串文字而不是为每次迭代创建新对象)。 尝试为@"player_id"添加current_row创建一个NSString对象,然后获取该同一对象的所有键:

NSString* playerId = @"player_id";
for(){
    NSMutableArray *current_row = [NSMutableArray arrayWithObjects: playerId,...];
...
}
NSArray *newArray = [expense_ArrContents allKeysForObject:playerId];

答案 1 :(得分:0)

你的NSArray *newArray = [expense_ArrContents allKeysForObject:@"payer_id"];不会返回任何值,因为在expense_ArrContents中没有这样的键(@“payer_id”),而是有1,2,3等键。你的要求是什么?想看看在expense_ArrContents中只有log

的所有键都是什么
NSArray*keys=[expense_ArrContents allKeys];

答案 2 :(得分:0)

试试这个:

NSMutableArray *array_key=[[NSMutableArray alloc]init];
for (NSString *key in expense_ArrContents) {    
    if ([[expense_ArrContents objectForKey:key] containsObject:@"payer_id"]) {
        [array_key addObject:key];
    }
}