2012-05-31 3 views
0

У меня есть набор словарей, хранящихся в plist. Ключами словаря являются: globalKey и moneyKey.NSDictionary поиск ключа и значение обновления

Теперь я хотел бы найти массив для определенного значения ключа. Если значение ключа существует, мне нужно обновить словарь с новым значением для другого ключа.

Пример: Мне нужно найти ключ @ "globalKey" для значения 5. Если значение 5 существует, мне нужно обновить этот словарь с новым значением для ключа @ "moneyKey" и сохранить его на plist.

Какой был бы лучший подход для этого?

Это, как я добавить новый словарь:

array = [NSMutableArray arrayWithContentsOfFile:filePath]; 
NSDictionary *newDict = [[NSDictionary alloc] init]; 
newDict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:month],@"globalKey", [NSNumber numberWithFloat:money], @"moneyKey", nil]; 
[array addObject:newDict]; 
[array writeToFile:filePath atomically:YES]; 

ответ

1

Если я понимаю, что вы пытаетесь сделать правильно, то я думаю, что вы могли бы попробовать что-то вроде этого:

NSMutableArray *myArray = [[NSMutableArray alloc] init]; // YOUR STARTING ARRAY OF NSDICTIONARIES 

NSMutableIndexSet *indexSet = [[NSMutableIndexSet alloc] init]; 
NSMutableArray *dictionariesToReplace = [[NSMutableArray alloc] init]; 

for (int i=0; i < [myArray count]; i++) 
{ 
    // Pull out the value to check 
    int valToCheck = [[[myArray objectAtIndex:i] valueForKey:@"globalKey"] intValue]; 

    // Check if a match was made 
    if (valToCheck == 5) 
    { 
     // Make a copy of the existing NSDictionary 
     NSMutableDictionary *newDictionary = [[myArray objectAtIndex:i] mutableCopy]; 
     [newDictionary setValue:@"NEW VALUE" forKey:@"moneyKey"]; 

     // Add the dictionary to the array and update the indexset 
     [dictionariesToReplace addObject:newDictionary]; 
     [indexSet addIndex:i]; 
    } 
} 

// Update the array with the new dictionaries 
[myArray replaceObjectsAtIndexes:indexSet withObjects:dictionariesToReplace]; 

Надеется, что это помогает вам.

+0

Спасибо, сэр, ваш ответ велик! Только одна мелочь ошибочна. Он должен быть ([myArray count]) вместо ([myArray count] - 1). Все остальное здорово. – maxus182

+0

@ maxus182 Рад, что я могу помочь! Я обновил цикл соответственно - глупая ошибка с моей стороны. –

0

Вы можете использовать NSPredicate искать массив словаря следующим образом:

NSPredicate * предикат = [NSPredicate predicateWithFormat: @ "globalKey == 5" ]; NSArray * predicateArray = [array filterArrayUsingPredicate: предикат];

Смежные вопросы