target-c, имеющий проблемы с NSDictioary объектом - PullRequest
0 голосов
/ 28 апреля 2010

У меня есть простое приложение для iPhone, которое я изучаю, и я хочу, чтобы переменная экземпляра называлась urlLists, которая является NSDictionary

Я объявил это так:

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

и в реализации:

@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

И, это все работает до здесь.

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

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

но я получаю старую ошибку EXC_BAD_ACCESS ...

Я знаю, что мне не хватает чего-то маленького, но что?

Спасибо

EDIT ::

Только что исправил, я добавил retain после dictionaryWithObjects

Но я не знаю, зачем мне нужно, dictionaryWithObjects не создавать объект автоматического выпуска?

1 Ответ

3 голосов
/ 28 апреля 2010

NSDictionary был освобожден.

Вы должны использовать self.urlLists = ..., поэтому он проходит через установщик, который сохраняет его.

Пропуск self установит ивар напрямую.

...