在我的一些学习中,我看到有人提到在视图控制器中你可以拥有一个模型,并在模型上有一些监听器来改变它。我不认为我正在使用正确的名称,这可能是我的搜索没有发现任何东西的原因。基本上我想将我的服务器调用从控制器移动到我的模型中,但是我需要某种监听器才能知道调用何时完成以更新我的视图。
答案 0 :(得分:19)
调查代表们 delegates tutorial
或阻止更高级 basic blocks tutorial
从代表开始,
您也可以使用NSNotification NSNotification tutorial但不推荐使用它,因为它广播到每个类,您可能只需要将消息发送到特定的类而不是每个类
答案 1 :(得分:12)
属于C#世界,我必须去客观c(为了我的工作)。 我认为在目标c中等效的事件是这种实现:
使用您所有活动的方法创建协议:
@protocol MyDelegate <NSObject>
- (void)myEvent;
@end
在您应该发送活动的班级中,添加:
@interface MyClassWichSendEvent : NSObject
@property (nonatomic, retain) IBOutlet id<MyDelegate> delegate;
@end
将事件提升到您想要的位置,例如:
- (IBAction)testEvent:(NSButton*)sender
{
[self.delegate myEvent];
}
现在在你的听众课堂上,你应该听这样的事件:
将协议添加到您正在收听的课程
@interface Document : NSDocument<MyDelegate>
在实现中,在init或界面构建器中,您必须链接对象实例的委托以监听您所听的类的自我。
代码
-(void)awakeFromNib
{
myObjToListen.delegate = self;
}
最后,在你的侦听器类中实现你的方法:
- (void)myEvent
{
NSLog(@"i have listen this event !");
}
对不起我的英文,我希望帮助那些来自java或C#的人。
答案 2 :(得分:8)
您正在寻找KVO - 键/值观察:
http://nachbaur.com/2011/07/29/back-to-basics-using-kvo/
代理+通知适用于对象之间的通信,但是当值发生变化时,它们不会自动发送消息(从您的问题中提取,这就是您所询问的内容)
答案 3 :(得分:0)
我认为您可能正在寻找NSNotificationCenter,这是一种将消息传递给可能正在收听的人的方式。因此,您可以从模型中的事件发出通知,并在控制器中监听它。更简洁的方法可能是使用委托来实现自己的协议。
答案 4 :(得分:0)
目标C使用delegates
这篇文章有一个很好的例子:How do I create delegates in Objective-C?