简化...
建筑物中有一系列公寓对象。每个公寓都有一个currenttenant。这些租户属于“人”类型。请注意,currentTenant没有对单元的引用,因此无法将信息发送回链上。
当租户遇到管道问题时,他会提出NSNotification:
[nc postNotificationName:@"PlumbingIssue" object:self];
每个公寓仅观察来自其当前租户的通知(这是在公寓建成时,在没有当前租户之前设置的):
[nc addObserver:self selector:@selector(alertBuildingManager:) name:@"PlumbingIssue" object:[self currentTenant];
当公寓收到来自其自己的currentTenant的通知时,它将发送自己的通知“ PlumberRequired”,以及公寓编号和NSDictionary中的currentTenant。
公寓观察以下通知,它将从任何公寓(或其他物体)获取:
[nc addObserver:self selector:@selector(callPlumber) name:@"PlumberRequired" object:nil];
我在这里可能会从根本上犯错吗?发生的情况是该公寓正在接收来自所有currentTenant的通知,而不是自己拥有。
抱歉,实际代码过于笨拙,无法发布。我只是想知道我在观察特定发件人的通知方面是否存在差距?
最佳答案
关键在这里:
每个公寓仅从其自己的当前租户观察通知(这是在公寓建成时,在没有当前租户之前设置的)
如果没有currentTennant
,则您的代码实际上正在执行此操作:
[nc addObserver:self selector:@selector(alertBuildingManager:) name:@"PlumbingIssue" object:nil];
当使用
nil
作为对象参数时,您告诉NSNotificationCenter
您希望将所有PlumbingIssue
警报传递给该观察者。您需要做的是确保只有在拥有currentTennant
时才设置通知。如果使用的是属性,则setCurrentTennant:
可能是执行此操作的好地方。确保确保在
currentTennant
发生更改时将自己作为观察者删除,并且始终确保在对象被释放后将其作为观察者完全删除(否则NSNotificationCenter
可能会尝试将通知发布到已释放对象,这是非常重要的。坏事)。 - [NSNotifcationCenter removeObserver:]
是最简单的方法。