/ / objetivo-c tendo problemas com um objeto NSDictioary - objetivo-c, exc-mau-acesso

Objetivo-c tendo problemas com um objeto NSDictioary - objetivo-c, exc-bad-access

Tenho um aplicativo simples para iPhone que estou aprendendo e quero ter uma variável de instância chamada urlLists que é um NSDictionary

Eu declarei assim:

@interface MyViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>{
IBOutlet UIPickerView *pickerView;
NSMutableArray *categories;
NSDictionary *urlLists;
}
@property(retain) NSDictionary *urlLists;
@end

e na implementação:

@implementation MyViewController
@synthesize urlLists;

...

- (void)viewDidLoad {
[super viewDidLoad];

categories = [[NSMutableArray alloc] init];

[categories addObject:@"Sport"];
[categories addObject:@"Entertainment"];
[categories addObject:@"Technology"];
[categories addObject:@"Political"];

NSArray *objects = [NSArray arrayWithObjects:@"value1", @"value2", @"value3", @"value4", nil];
urlLists = [NSDictionary dictionaryWithObjects:objects forKeys:categories];

for (id key in urlLists) {
NSLog(@"key: %@, value: %@", key, [urlLists objectForKey:key]);
}
}

...
@end

E, tudo isso funciona até aqui.

Eu adicionei um UIPicker ao meu aplicativo e, quando seleciono um dos itens, quero registrar o que foi escolhido e sua entrada relacionada no meu dicionário.

-(void) pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger) component {
for (id key in self.urlLists) {
NSLog(@"key: %@, value: %@", key, [urlLists objectForKey:key]);
}
}

mas recebo o antigo erro EXC_BAD_ACCESS ...

Eu sei que estou perdendo algo pequeno, mas o quê?

obrigado

EDITAR::

Acabei de consertar, adicionei um retain depois de dictionaryWithObjects

Mas eu não sei porque eu preciso, não deveria dictionaryWithObjects criar um objeto autorelease?

Respostas:

3 para resposta № 1

o NSDictionary foi desalocado.

Você deveria usar self.urlLists = ..., então ele passa pelo setter, que o retém.

Omissão self irá definir o ivar diretamente.