在我的一些学习中,我看到有人提到在您的视图控制器中,您可以拥有一个模型并在模型上设置某种侦听器以进行更改。我认为我没有为这些使用正确的名称,这可能是我的搜索没有出现任何结果的原因。本质上,我想将我的服务器调用从控制器移动到我的模型中,但我需要某种监听器来了解调用何时完成以更新我的视图。
5 回答
查看代表 代表教程
或块更高级的 基本块教程
从代表开始,
您也可以使用 NSNotification NSNotification 教程,但不推荐,因为它会广播到每个班级,并且您可能只需要向特定班级发送消息而不是每个班级
属于 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 或接口构建器中,您必须将对象实例的委托链接到侦听的类的 self 中。
在代码中
-(void)awakeFromNib
{
myObjToListen.delegate = self;
}
- 在 Interface Builder -> IBOutlet 中,从委托到您的监听类。
最后,在您的侦听器类中实现您的方法:
- (void)myEvent
{
NSLog(@"i have listen this event !");
}
对不起我的英语,我希望能帮助那些从 java 或 C# 开始的人。
您正在寻找 KVO - 键/值观察:
http://nachbaur.com/2011/07/29/back-to-basics-using-kvo/
代表+通知有利于对象之间的通信,但是当值发生变化时它们不会自动发送消息(从你的问题来看,这就是你要问的)
我认为您可能正在寻找 NSNotificationCenter ,这是一种将消息传递给可能正在收听的人的方法。因此,您可以从模型中的事件发送通知,然后在控制器中监听它。一种更简洁的方法可能是使用委托实现您自己的协议。
Objective C 使用委托
这篇文章有一个很好的例子:如何在 Objective-C 中创建委托?