Objective c NSNotification是检测更改的正确选择吗?
我有一个自定义的UIView子类,当某个值(NSInteger)低于某个值时,它需要执行选择器。从文档中可以看出,我需要设置一个观察者对象来查找此更改 NSInteger值存在于视图控制器中,UIView子类作为同一视图控制器中的子视图实现 我想知道下面这样的事情是否在正确的轨道上:Objective c NSNotification是检测更改的正确选择吗?,objective-c,cocoa,nsnotification,Objective C,Cocoa,Nsnotification,我有一个自定义的UIView子类,当某个值(NSInteger)低于某个值时,它需要执行选择器。从文档中可以看出,我需要设置一个观察者对象来查找此更改 NSInteger值存在于视图控制器中,UIView子类作为同一视图控制器中的子视图实现 我想知道下面这样的事情是否在正确的轨道上: -(void)createNotification: [[NSNotificationCenter defaultCenter] addObserver:self //
-(void)createNotification:
[[NSNotificationCenter defaultCenter]
addObserver:self //since this is in the viewController, I'm thinking it's "self"
selector:@selector(genCountLow:)
name:@"ReviewGenCount"
object: nil ];
我正在努力为这个观察者添加执行动作的条件。例如,如果条件为:
if(genCount < 3) {
///code statement
}
if(genCount<3){
///代码语句
}
我希望我的观察者查找上述更改,然后执行后续操作。我会像这样将其添加到通知对象中吗
- (void)genCountLow:(NSNotification *)notification {
if (genCount < 3) {
[electricalSystemDiagramView depowerShedBuses];
}
}
-(void)genCountLow:(NSNotification*)通知{
如果(genCount<3){
[电气系统图查看车辆供电用电];
}
}
我将把发布通知的代码放在view类中。例如:
- (void)setFrobs:(NSInteger)frobs {
if (frobs < 3 && _frobs >= 3)
[[NSNotificationCenter default...] postNotificationName:...];
_frobs = frobs;
}
-(void)setFrobs:(NSInteger)frobs{
如果(frobs<3&&U frobs>=3)
[[NSNotificationCenter默认…]postNotificationName:…];
_青蛙=青蛙;
}
然后,在更改FROB的值时始终使用SETFROB。请注意,我对视图类一无所知。您的视图不应该做出此决定,视图控制器应该这样做。通常,您应该尝试避免视图需要关于模型或控制器实现的信息的情况 您的视图应该有一个标志,例如名为
drawLowState
的BOOL
属性。当此值更改时,应通过以下操作以不同的外观重新绘制视图:
在YourView.m:
- (void)setDrawLowState:(BOOL)isLow
{
if(drawLowState != isLow)
{
drawLowState = isLow;
[self setNeedsDisplay];
}
}
- (void)setGenCount:(NSInteger)aCount
{
genCount = aCount;
self.view.drawLowState = (genCount < 3);
}
您可以通过基于drawLowState
属性的值更改视图对象的绘制例程中绘制的内容来更改视图的外观
由于视图控制器知道整数值何时更改,因此您可以轻松地在setter中为integer属性做出决定,并告诉视图更新其外观:
在YourViewController.m:
- (void)setDrawLowState:(BOOL)isLow
{
if(drawLowState != isLow)
{
drawLowState = isLow;
[self setNeedsDisplay];
}
}
- (void)setGenCount:(NSInteger)aCount
{
genCount = aCount;
self.view.drawLowState = (genCount < 3);
}
-(void)setGenCount:(NSInteger)aCount
{
genCount=一个账户;
self.view.drawLowState=(genCount<3);
}
总之,为了更新genCount,我不需要实现NSNotification对象,因为我可以使用自定义setter方法来完成显示的重绘。这是正确的。实现的主要变化是由视图控制器而不是视图决定视图应该显示什么。视图只是根据标志更改其状态。由于视图控制器始终使用self.view
引用视图,因此无需使用通知,只需直接在视图上设置属性即可。当您需要一个或多个对象对另一个对象中的更改作出反应时,如果没有直接连接,则通常通过IVAR、插座或其他方式使用通知。