2014-12-05 3 views
0

У меня было приложение IPhone, в котором у меня был массив элементов. Но мне нужен каждый элемент внутри словаря, т. Е. (Nsmuatblearray словарей), я сделал, как это Но несколько раз его дает некоторые нежелательные результаты `Преобразование nsarray в nsmutablearray словарей в iOS?

id objectInstance; 
    NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc] init]; 
    for (objectInstance in self.SelectedContacts) 
     [mutableDictionary setObject:objectInstance forKey:@"tag"]; 
     [finalarray addObject:mutableDictionary]; 

` Я делаю, как это может кто-нибудь указывает мне, где я буду неправильно?

ответ

2

Как вы это делаете, это переписывание элемента для ключевого «тега» каждый раз. Я не совсем уверен, что вы пытаетесь достичь, но я подозреваю, что вы должны написать что-то вроде:

for (id objectInstance in self.SelectedContacts) { 
    NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc] init]; 
    [mutableDictionary setObject:objectInstance forKey:@"tag"]; 
    [finalarray addObject:mutableDictionary]; 
} 
1

В цикле вы помещаете другой объект с тем же именем тега «tag». Таким образом, здесь сохраняется только последний объектInstance, остальные заменяются следующим.

Если вы хотите, чтобы каждый из них был сохранен, обновите свой «тег» новыми именами тегов.

Другое дело, либо вы пропустили, чтобы показать { в коде выше, или если вы действительно не имеют этих брекетов { и } для for тогда только следующая строка берется с петлей и [finalarray addObject:mutableDictionary]; выполняется один раз! !!

+0

и может мне помочь, как сделать его обратное, т.е. из массива словарей просто массив – hacker

+0

вы можете использовать valueForKey: что будет возвращать массив. И вы также можете опубликовать новый вопрос для этого. –

+0

получил это, в любом случае спасибо за внимание ур :) – hacker

0

Здесь нет необходимости создавать NSMutableDictionary, потому что вы просто использовать его, чтобы сохранить его в массиве нет дальнейшей модификации не существует.

Также он будет потреблять больше памяти, чем NSDictionary. В будущем, если вы хотите обновить объект в словарь, который можно конвертировать в NSDictionaryNSMutableDictionary используя

NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithDictionary:object]; 

и наоборот в NSDictionary.

Сейчас простой способ добавить словарь в массиве, как это:

NSMutableArray *finalArray = [NSMutableArray new]; 
for (NSDictionary *object in self.SelectedContacts) { 
    [finalArray addObject:@{ @"tag" : object }]; 
} 
0

не на 100% уверен, из вашего вопроса, если вы хотите массив словарей каждый с тем же ключом, или массив с 1 словарем в этом.

Многие словари версия

for (long i = 0; i < [self.SelectedContacts count];i++) 
{ 
    NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionary]; 
    [mutableDictionary setObject:[self.SelectedContacts objectAtIndex:i] forKey:@"tag"]; 
    [finalarray addObject:mutableDictionary]; 
} 

1 словарь версия

NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionary]; 

for (long i = 0; i < [self.SelectedContacts count];i++) 
{ 
    NSString *keyString = [NSString stringWithFormat:@"tag_%li",i]; 
    [mutableDictionary setObject:[self.SelectedContacts objectAtIndex:i] forKey:keyString]; 
} 

[finalarray addObject:mutableDictionary]; 

в этом 1 словаре версия теги будут tag_ следуют старым значением индекса в массиве.

TAG_0 tag_1 и т.д.

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