objective-c与NSDictioary对象有问题

时间:2010-04-28 11:30:38

标签: objective-c exc-bad-access

我有一个简单的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错误...

我知道我错过了一些小事,但是什么?

由于

修改::

修复后,我在retain

之后添加了dictionaryWithObjects

但是我不知道为什么我需要,dictionaryWithObjects不应该创建自动释放对象?

1 个答案:

答案 0 :(得分:3)

NSDictionary已取消分配。

你应该使用self.urlLists = ...,所以它会通过设置者来保留它。

省略self将直接设置ivar。