0

そのため、現在 indexPath を保存してアクセスしようとしていますが、EXC_BAD_ACCESS エラーが引き続き発生し、xcode で Analyze ツールを使用すると、初期化中に 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 に答える