![](/img/trans.png)
[英]Pushing UITableViewController onto [self navigationController] causes an EXC_BAD_ACCESS
[英]release after pushing view onto navigation stack gives me exc_bad_access error
如果釋放未注釋,則tableView didSelectRowAtIndexPath中的以下代碼會出現錯誤:
ComicDetailsViewController * comicDetailsViewController = [[ComicDetailsViewController alloc] initWithNibName:@"ComicDetailsViewController" bundle:nil];
comicDetailsViewController.comic = (Comic *)[arrayOfComics objectAtIndex:indexPath.row];
comicDetailsViewController.bLoadPerformances = YES;
[self.navigationController pushViewController:comicDetailsViewController animated:YES];
//[comicDetailsViewController release];
該錯誤不會立即發生,而是在我單擊omicDetailsViewController中的后退按鈕后立即發生。
即)我選擇tableview行,下一個視圖加載並正常工作。 一旦完成該視圖並單擊后退導航按鈕,程序就會崩潰,並給我exc_bad_access。 為什么是這樣?
編輯:
#0 0x9682b176 in __kill
#1 0x9682b168 in kill$UNIX2003
#2 0x968bd89d in raise
#3 0x968d39bc in abort
#4 0x968c2164 in szone_error
#5 0x968c21e7 in free_small_botch
#6 0x000a7877 in -[NSConcreteMutableData dealloc]
#7 0x00006433 in -[ComicDetailsViewController dealloc] at ComicDetailsViewController.m:376
#8 0x003cbcc7 in -[UINavigationController setDisappearingViewController:]
#9 0x003c9219 in -[UINavigationController _clearLastOperation]
#10 0x003c9b62 in -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:]
#11 0x0055224a in -[UINavigationTransitionView _notifyDelegateTransitionDidStopWithContext:]
#12 0x0055338a in -[UINavigationTransitionView _navigationTransitionDidStop]
#13 0x0034829d in -[UIViewAnimationState sendDelegateAnimationDidStop:finished:]
#14 0x0034812f in -[UIViewAnimationState animationDidStop:finished:]
#15 0x0244ca28 in run_animation_callbacks
#16 0x0244c8e9 in CA::timer_callback
#17 0x02688d43 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__
#18 0x0268a384 in __CFRunLoopDoTimer
#19 0x025e6d09 in __CFRunLoopRun
#20 0x025e6280 in CFRunLoopRunSpecific
#21 0x025e61a1 in CFRunLoopRunInMode
#22 0x02f0c2c8 in GSEventRunModal
#23 0x02f0c38d in GSEventRun
#24 0x00326b58 in UIApplicationMain
#25 0x000020f4 in main at main.m:14
編輯2:
這是comicDetailsViewController的dealloc塊:
- (void)dealloc {
[comic release];
[xmlParser release];
[webData release];
[currentPerformanceObject release];
[arrayOfPerformances release];
[soapResults release];
[btnPerformances release];
[super dealloc];
}
第376行是webData發布行
編輯3:
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"ERROR with theConenction");
[connection release];
[webData release];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"DONE. Received Bytes: %d", [webData length]);
if(xmlParser)
{
[xmlParser release];
}
xmlParser = [[NSXMLParser alloc] initWithData: webData];
[xmlParser setDelegate: self];
[xmlParser setShouldResolveExternalEntities: YES];
[xmlParser parse];
[connection release];
[webData release];
}
請向我們顯示堆棧跟蹤。
但是我最初的猜測是您在ComicDetailsViewController
類的- (void) dealloc
ComicDetailsViewController
。
請檢查幾件事
dealloc
塊還好 comicDetailsViewController
對象或comicDetailsViewController
對象的引用。 希望這可以幫助。
謝謝,Madhup
在彈出視圖之前,通過向適當的對象發送取消消息來取消NSURLConnection。
假設您的NSURLConnection對象名為asyncConnection:
-(void)viewWillDisappear:(BOOL)animated
[asyncConnection cancel];
}
問題仍然可能在您的dealloc中。
僅僅因為該對象位於您的@interface(.h文件)中,並不意味着您可以/必須取消分配該變量。 我也有這個問題
.h文件
@interface PeopleViewController : UITableViewController {
NSArray *people;
}
@property (nonatomic, retain) NSArray *people;
@end
.m文件
@implementation PeopleViewController
@synthesize people;
- (void)viewDidLoad {
people = [town.people allObjects];
}
...
- (void)dealloc {
[people release];
}
@end
我不需要釋放人員,因為在定制視圖中時,我沒有增加對象的保留計數,因此在dealloc過程中釋放它會引起我的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.