仍然「有點」新手...我有一個NSMutableArray存儲文件名 - 當用戶單擊UITableView時,相應的選定單元格將傳遞數組中的某個文件名到MPMoviePlayerController播放。它可以工作,但是如果我退出視圖控制器並返回,只有我播放的最後一個視頻纔會起作用,如果我選擇任何其他表項,我會碰到「EXEC_BAD_ACCESS」。所以我假設陣列在視圖控制器消失時被釋放 這裏是代碼:NSMutableArray導致EXC_BAD_ACCESS在viewcontroller消失後出現崩潰並重新出現
first off:「NSMutableArray * filenameArray;」在.h文件
(void)viewDidLoad
{
[super viewDidLoad];
//filenameArray = [[[NSMutableArray alloc] initWithCapacity: 500] autorelease];
filenameArray = [[NSMutableArray alloc] initWithCapacity: 500];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell...
NSString *fullPath = [[NSString alloc] init];
fullPath = [[_importableVideoDocs objectAtIndex:indexPath.row] description];
NSLog(@"Full path is: %@", fullPath);
[filenameArray addObject:fullPath];
NSString *fileName = [fullPath lastPathComponent];
[fullPath release];
cell.textLabel.text = fileName;
return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Tapping row %d", indexPath.row);
NSUInteger i = (indexPath.row);
NSString *test = [[filenameArray objectAtIndex:i] description];
//CRASH HAPPENS HERE IF VIEW CONTROLLER IS DISMISSED AND THEN APPEARS AGAIN
//when view disappears is filenameArray released? do I need to retain?
NSLog(@"%@", test);
moviePlayer = [[[CustomMoviePlayerViewController alloc] init] autorelease];
// Show the movie player as modal
[self presentModalViewController:moviePlayer animated:YES];
// Prep and play the movie
[moviePlayer readyPlayer:test];
}
所以我的「新手」問題是,我該如何保持這種停止EXC_BAD_ACCESS崩潰當我點擊表格視圖時出現第二次?或者如果我的回答不正確,我需要做些什麼來阻止這次事故?如果有人可以幫我解決這個問題,我將非常感謝! 謝謝!
您通常會受益於從斷點處逐步完成代碼。 Stacktrace也應該幫助你隔離這個。你怎麼知道崩潰在這裏與正在卸載的視圖有關? – Nick 2010-10-08 06:09:41