我有一个简单的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
不应该创建自动释放对象?
答案 0 :(得分:3)
NSDictionary
已取消分配。
你应该使用self.urlLists = ...
,所以它会通过设置者来保留它。
省略self
将直接设置ivar。