2013-08-30 98 views
1

我有A類和BI我打電話從類B類A.Here我的問題是寬度和A級的高度取決於類b。當sizeForScrollView財產(B類屬性)改變了我想要的通知。一切都很好。但是當我重新加載類A時,它正在從B類通知行中崩潰。BAD_ACCESS打電話時通知

這裏是代碼:

A級

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (changeContentSize) name:@"MyNotification" object:nil]; 
-(void)changeContentSize{ 
    self.scrollView.contentSize = CGSizeMake(self.aSubjectView.sizeForScrollView.width, self.aSubjectView.sizeForScrollView.height); 
    self.aSubjectView.frame = CGRectMake(frameForView.origin.x, frameForView.origin.y, frameForView.size.width, self.aSubjectView.sizeForScrollView.height); 

} 

B類

CGRect rect; 
rect.size.width = self.frame.size.width; 
rect.size.height = heightForSubject + 10; 
rect.origin = self.frame.origin; 
sizeForScrollView = rect.size; 
NSNotification* notification = [NSNotification notificationWithName:@"MyNotification" object:self]; 
     [[NSNotificationCenter defaultCenter] postNotification:notification]; 

請幫me.Thanking你。

+0

刪除了「MyNotification」觀察者什麼你所說的「當我在那個時候重裝類A是由B類通知線路崩潰」的意思是? 「重新加載」是什麼意思?你在哪一行得到了BAD_ACCESS? –

+0

我有重新加載按鈕,以便用戶可以重新加載component.and它從崩潰[[NSNotificationCenter defaultCenter] postNotification:通知]; – h999

+0

令人驚訝。你能發佈更多相關的代碼嗎?另外,我仍然不確定你的意思是重新加載。你的意思是從某些外部數據存儲中讀取後,組件的某些值是否已刷新?如果是這樣,這是怎麼發生的? –

回答

2

讓A級的肯定實例卸下自己是在dealloc的觀察員。否則,如果您釋放實例,通知中心在釋放後仍會嘗試與它通話,導致EXC_BAD_ACCESS崩潰。

如果你不使用ARC,這將是這個樣子(A類):

- (void)dealloc 
{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    [super dealloc]; // Take this line out if you are using ARC 
} 

這是必要的,因爲添加對象作爲觀察員不會增加其保留計數。通知中心不接受觀察員的所有權,或者做任何事情來追蹤它是否仍在附近。

0

在viewDidUnload

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"MyNotification" object:nil];