2013-01-22 39 views
0

我想打電話給我現有的視圖中新視圖內一個新的ViewEXEC_BAD_ACCESS而突然跳出現有的View

TransactionFinish *childView= [[TransactionFinish alloc] initWithNibName:@"TransactionFinish" bundle:nil]; 

     childView.view.frame = self.view.frame; 

     childView.view.frame=CGRectMake(10, 10, self.view.frame.size.width-20, self.view.frame.size.height-20); 
     childView.view.alpha = 0.0f; 
     [self.view addSubview:childView.view]; 

     [UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationCurveEaseOut 
         animations:^{ 
          childView.view.alpha = 1.0f; 
         } 
         completion:^(BOOL finished) { 
         }]; 

它往裏走的TransactionFinishViewDidLoad()(我曾經嘗試調試它),但它給了我線程EXEC_BAD_ACCESS(code=1,address=0x31f54e62)綠色

+0

您是否嘗試通過異常處理進行調試? 您可能會收到代碼崩潰的確切行 。 – vshall

+0

你使用ARC嗎? – sergio

+0

@sergio我沒有使用ARC – onkar

回答

1

該問題的生命期爲childView。您實例化和對它的引用存儲到一個局部變量:

TransactionFinish *childView= [[TransactionFinish alloc] initWithNibName:@"TransactionFinish" bundle:nil]; 

如果使用ARC,當局部變量超出範圍,對象引用由它(childView)被釋放。

如果你不使用ARC,我想你正在做的:

[childView release]; 

某處,以免childView被泄露(如你的代碼粘貼上方將意味着)。

兩種假設都可以解釋爲什麼你會崩潰:當調用viewDidLoad時,控制器已被釋放。

添加childViewself.view

[self.view addSubview:childView.view]; 

將保留childView.view但不childView。所以控制器被解除分配,而其視圖不是。

一個修復到這一情況在類中strong屬性來引用存儲到您childView控制器:

@property(nonatomic, strong) TransactionFinish *childView; 

另一種可能性是使用controller containment;你可以做些什麼li

[vc willMoveToParentViewController:self]; 
[self addChildViewController:childView]; 
[self.view addSubview:childView.view]; // or something like this. 
[childView didMoveToParentViewController:self]; 

但是這隻會在iOS5 +上運行。

+0

我檢查了你以前的答案,仍然是一樣的。我正在使用iOS 4.1。 – onkar

+0

如果你沒有使用ARC,你是否在'childView'上執行'release'來避免它被泄漏? – sergio