2014-11-26 3 views
-1

Я пытаюсь добавить словарные ключи к объектам в массиве, а затем добавить их в окончательный массив здесь:Невозможно добавить объекты в NSMutableArray в цикл

NSMutableDictionary *newVen = [NSMutableDictionary dictionary]; 
NSMutableArray *final = [[NSMutableArray alloc] init]; 
for (NSDictionary *obj in self.venues) { 
    [newVen setObject:[obj valueForKey:@"name"] forKey:@"name"]; 
    [final addObject:newVen]; 
} 

Проблема это только добавляет тот же «имя» до конечного массива и когда я распечатать, скажем, после 3-х петель, я получаю:

<__NSArrayM 0x79e26990>(
{ 
    name = Mustang; 
}, 
{ 
    name = Mustang; 
}, 
{ 
    name = Mustang; 
} 
) 

Я ожидаю, что множество различных названий, например, Mustang, Ferarri, BMW

+0

Итак, почему Вы добавляете тот же объект 3 раза, vs 3 разных объекта? –

+0

И вы даже хотели добавить словари вообще, а просто добавить строки напрямую? –

+0

Self.venues имеет 3 объекта, которые делают его петлей 3 раза. Существуют ключи словаря из других массивов, которые я также планирую добавлять к объектам в конечном массиве. – Ryasoh

ответ

1

Проблема заключается в том, что вы добавляете один и тот же mutectict три раза, первый раз с именем первого объекта, второй с именем второго мутирующего как первого, так и второго, в-третьих, вы все мутируете, потому что все они являются одним и тем же mutableDict. Я думаю, что вы, возможно, не нужен изменяемый Dict внутри, вы можете использовать это:

NSMutableArray *final = [[NSMutableArray alloc] init]; 
for (NSDictionary *obj in self.venues) { 
NSDictionary *newVen [email protected]{@"name":[obj valueForKey:@"name"]}; 
[final addObject:newVen]; 
} 

Если вам нужно Dict внутри массива будет изменчивыми использовать это:

 NSMutableArray *final = [[NSMutableArray alloc] init]; 
for (NSDictionary *obj in self.venues) { 
NSMutableDictionary *newVen =[NSMutableDictionary dictionaryWithDictionary:@{@"name":[obj valueForKey:@"name"]}]; 
[final addObject:newVen]; 
} 
Смежные вопросы