我有一个名为getProjects
的方法。在我的方法中,我从json解析数据。我将项目的name
和id
保存在我的实例变量projectsArray
中NSMutableArray
。
问题是我有一个名为IBAction
的按钮(writeFile
),如果我尝试在点击时记录该数组,我的应用程序崩溃了。错误消息为ESC_BAD_ACCESS
。但为什么?我正在使用ARC。
`Method getProjects
- (void)getProjects {
int count = 0;
self.projectsArray = [NSMutableArray arrayWithCapacity:10];
SBJsonParser *parser = [[SBJsonParser alloc] init];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@projects.json", urlPath]]];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
NSArray *projects = [parser objectWithString:json_string error:nil];
for (NSDictionary *project in projects) {
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:2];
[dict setObject:[project objectForKey:@"name"] forKey:@"name"];
[dict setObject:[project objectForKey:@"id"] forKey:@"id"];
[self.projectsArray insertObject:dict atIndex:count];
[self.selectProject addItemWithTitle:[project objectForKey:@"name"]];
count++;
}
}
我在applicationDidFinishLaunching
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[self getProjects];
NSLog(@"%@", self.projectsArray);
}
我的applicationDidFinishLaunching中的日志返回我的数组。
答案 0 :(得分:0)
好吧,看来你已经找到了问题的原因:
我更改了分配以保留,现在它可以正常工作。但为什么呢?
原因是通过将属性声明为assign
,在设置时,不会保留其值。
所以:
您可以像这样创建数组:
self.projectsArray = [NSMutableArray arrayWithCapacity:10];
arraywithCapacity
将为您提供一个自动释放的对象;
将对象分配给属性时,该对象不会保留;
在某个时间点,在执行NSLog之前,该对象被解除分配。
的崩溃。