0

所以目前我正在尝试保存 indexPath 并访问它,但我一直收到 EXC_BAD_ACCESS 错误,当我在 xcode 中使用分析工具时,它说在初始化期间存储到我的 indexPath 的值永远不会被读取。有人可以帮忙告诉我这里出了什么问题吗?

设置 indexPath 的方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

NSURL *requestURL = [[NSURL alloc] initWithString:@"URL"];

//The request
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:requestURL];

request.userInfo = [NSDictionary dictionaryWithObjectsAndKeys:indexPath,@"indexPath", nil];

[request setDelegate:self];    

[request startAsynchronous];   
[requestURL release];
[request release];
}

访问 indexPath 的方法:

-(void)requestFinished:(ASIHTTPRequest *)request{

UIImage *foodImage = [[UIImage alloc] initWithData:[request responseData]];

NSIndexPath *indexPath = [request.userInfo objectForKey:@"indexPath"];

FoodDescription *detailViewController = [[FoodDescription alloc] initWithNibName:@"FoodDescription" bundle:nil];

// pass the food
detailViewController.aFood = [[NSMutableDictionary alloc] initWithDictionary:[_foodArray objectAtIndex:indexPath.row]];
detailViewController.foodPicture = foodImage;
detailViewController.restaurantName = _restaurantName;

// Pass the selected object to the new view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
}
4

2 回答 2

2

你正在分配一个 NSIndexPath,然后用你的下一条语句覆盖它。更糟糕的是,您泄露了在第一条语句中分配的内存。这可能是静态分析器正在接受的。导致崩溃的原因是您试图释放从第一条语句覆盖对象的对象。由于它已经自动发布,这导致崩溃。

只需使用:

NSIndexPath *indexPath = [request.userInfo objectForKey:@"indexPath"];

并摆脱发布声明。你应该很好。

于 2012-04-08T22:53:50.293 回答
0

好吧,首先您分配一个新对象,并将其存储到indexPath. 然后,您使用之前存储在didSelectRowAtIndexPath. 因此,您新分配的索引路径会丢失,并且会出现错误。

更重要的是,然后您尝试释放您存储在 中的这个对象didSelectRowAtIndexPath,而不是首先“拥有”它,因此您的应用程序崩溃了。

于 2012-04-08T22:51:34.430 回答