2013-08-30 66 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];