iOS:什么是Objective-C中的事件监听器?

iOS: what is the equivalent of an event listener in Objective-C?

在我的一些学习中,我看到有人提到,在视图控制器中,您可以有一个模型,并且在模型上有某种类型的监听器来监听模型中的更改。我觉得我用的名字不对,这可能就是为什么我的搜索没有找到任何东西的原因。本质上,我想将服务器调用从控制器移动到我的模型中,但是我需要它们上的某种监听器来知道调用何时完成以更新我的视图。


调查学员学员教程

或阻止更高级一点基本块教程

从代表开始,

您也可以使用nsnotification nsnotification教程,但不建议将其广播到每个类,您可能只需要将消息发送到特定的类,而不是每个类。


属于C世界,我必须去目标C(我的工作)。我认为目标C中的等效事件是这样的执行:

使用事件的所有方法创建协议:

1
2
3
@protocol MyDelegate <NSObject>
    - (void)myEvent;
@end

在应该发送事件的类中,添加:

1
2
3
4
5
@interface MyClassWichSendEvent : NSObject

@property (nonatomic, retain) IBOutlet id<MyDelegate> delegate;

@end

在需要的地方引发事件,例如:

1
2
3
4
- (IBAction)testEvent:(NSButton*)sender
{
    [self.delegate myEvent];
}

现在,在您的Listener类中,您应该听下面这样的事件:

将协议添加到您的课堂

1
@interface Document : NSDocument<MyDelegate>

在实现中,在init或interface builder中,必须将对象实例的委托链接到侦听类的self。

代码中

1
2
3
4
-(void)awakeFromNib
{
    myObjToListen.delegate = self;    
}
  • 在Interface Builder->IBoutlet中,从委托到侦听类。

最后,在侦听器类中实现方法:

1
2
3
4
- (void)myEvent
{
    NSLog(@"i have listen this event !");
}

对不起,我的英语,我希望帮助那些来自Java或C语言的人。


您正在寻找kvo-键/值观察:

https://developer.apple.com/library/mac/documentation/cocoa/conceptive/keyValueObservation/keyValueObservation.html

http://nachbaur.com/2011/07/29/back-to-basics-using-kvo/

委托+通知对于对象之间的通信很好,但当值发生变化时(从您的问题来看,这就是您要问的问题),它们不会自动发送MSG。


目标C使用学员

这篇文章有一个很好的例子:如何在Objective-C中创建代表?


我认为您可能在寻找nsnotificationcenter,这是一种将消息传递给可能正在收听的人的方法。因此,您可以从模型中的一个事件发送一个通知,并在控制器中监听它。更清洁的方法可能是使用委托实现自己的协议。