2013-02-09 3 views
0

У меня есть массив, состоящий из дополнительных подмассивовГде я могу инициализировать словарь NSMutable?

Я хочу показать сводку содержимого подъярусов в TableView с количеством вхождений каждой записи. Я определил, что лучший и простой способ - это NSMutableDictionary как промежуточный шаг.

Я объявляю словарь в моей реализации

@implementation ReviewViewController 
{ 
NSMutableDictionary *dict; 
} 

и вниз в моих методах я инициализироваться и использовать его так:

dict = [NSMutableDictionary new]; 
[dict setObject:[Observation entryCount] forKey:[observedItem species]]; 

перекачка ключа и объекта является преднамеренным в качестве графа Я хочу. Я использую тот факт, что значения сохраняются, но ключи перезаписываются, поэтому, если я их обмениваю, я получаю бесплатное сохранение.

Он работает !, но каждый раз, когда вызывается метод, Словарь сбивается с повторной инициализации, поэтому я ввожу только последнее. В любом другом месте он выходит из сферы действия.

Если я передам его как аргумент в имени метода, я получаю сообщение «Локальное объявление« dict »скрывает переменную экземпляра». Код уже является неприводимым набором деталей, поэтому

так, где же место для создания экземпляра?

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

+0

Whats in [seenItem species]? – Rajneesh071

ответ

0

Обычно вы инициализируете его в своем методе init. Для контроллера зрения это, как правило, следующее: «В любом другом месте, и он выходит из области видимости»

- (id)initWithNibName:(NSString*)nibName bundle:(NSBundle*)bundle { 
    if ((self = [super initWithNibName:nibName bundle:bundle])) { 
     dict = [NSMutableDictionary new]; 
    } 
    return self; 
} 

Я не понимаю, что вы имеете в виду. Это переменная экземпляра. Таким образом, он имеет смысл в любом методе в классе.

Кстати, я бы назвал ваши переменные экземпляра префиксом подчеркивания, например. _dict. Это общепринятое соглашение, и это помогает вам помнить при использовании его, что это переменная экземпляра.

+0

спасибо. тем временем, простейший из мест, ViewDidLoad, сделал трюк, но если initWithNibName является более условным. Я думал, что подчеркивание используется только для форсирования синтезированного свойства. Живи и учись, я просто жил. – aremvee

+0

'viewDidLoad' не плохое место для этого. Все зависит от того, что жизненный цикл этого объекта. Если он находится в 'viewDidLoad', словарь будет инициализироваться новым, пустым при каждом загрузке представления. Это может быть то, что вы хотите, или это может быть не так. – mattjgalloway

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