Ладно, если исходить из Perl, я привык к тому, что массивы держат ссылки на хэши (словарь на iPhone).
Я хотел бы знать следующее: если у меня есть NSArray из NSMutableDictionaries. Скажем, я добавил следующий NSMutableDictionary к NSArray:
[theArray addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys: timestamp, @"timestamp" ,name, @"name" ,lat, @"lat" ,lon, @"lon" , nil]];
Затем я перебрал массив так:
for (NSMutableDictionary theDict in theArray)
{
}
каждый theDict
представляет указатель данных NSMutableDictionary, так что я могу сделать это:
for (NSMutableDictionary *theDict in theArray)
{
if ([theDict objectForKey:@"timestamp"] != nil && [[theDict objectForKey:@"timestamp"] isEqualToString:@"timestamp"])
{
[theDict setObject:@"new name" forKey@"name"];
}
}
и затем ожидать, что theArray
будет хранить измененное значение в течение всего срока действия массива?
или мне нужно сделать следующее:
int ct = 0;
for (NSMutableDictionary *theDict in theArray)
{
if ([theDict objectForKey:@"name"] != nil && [[theDict objectForKey:@"name"] isEqualToString:@"name you want to change"])
{
NSMutableDictionary *tmpDict = [[NSMutableDictionary alloc] initWithDictionary:theDict copyItems:YES];
[tmpDict setObject:@"new name" forKey@"name"];
[theDict replaceObjectAtIndex:ct withObject:tmpDict];
[tmpDict release];
break;
}
ct += 1;
}
Это не может быть весь этот код, не так ли? просто заменить одно значение для ключа NSMutableDictionary, хранящегося в NSArray?
Извините, если этот вопрос очевиден для некоторых ... но все еще пытаюсь обернуть мой разум вокруг указателя на словарь (или объект) в Objective-c - с примерно эквивалентен ссылке на хеш в perl vs копия (или глубокая копия) объекта в Objective-c. И проблема становится еще более запутанной NSArray, держащим указатели (надеюсь) на NSMutableDictionaries. Вот как это делается в perl - и из того, что я понимаю, - вне имени (указатель против ссылки) .. то же самое в Objective-c.