18

在我的一些学习中,我看到有人提到在您的视图控制器中,您可以拥有一个模型并在模型上设置某种侦听器以进行更改。我认为我没有为这些使用正确的名称,这可能是我的搜索没有出现任何结果的原因。本质上,我想将我的服务器调用从控制器移动到我的模型中,但我需要某种监听器来了解调用何时完成以更新我的视图。

4

5 回答 5

20

查看代表 代表教程

或块更高级的 基本块教程

从代表开始,

您也可以使用 NSNotification NSNotification 教程,但不推荐,因为它会广播到每个班级,并且您可能只需要向特定班级发送消息而不是每个班级

于 2012-05-08T03:27:49.670 回答
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 或接口构建器中,您必须将对象实例的委托链接到侦听的类的 self 中。

在代码中

-(void)awakeFromNib
{
    myObjToListen.delegate = self;    
}
  • 在 Interface Builder -> IBOutlet 中,从委托到您的监听类。

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

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

对不起我的英语,我希望能帮助那些从 java 或 C# 开始的人。

于 2014-02-18T09:31:14.763 回答
8

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

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html

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

代表+通知有利于对象之间的通信,但是当值发生变化时它们不会自动发送消息(从你的问题来看,这就是你要问的)

于 2012-05-08T04:11:51.743 回答
0

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

于 2012-05-08T03:28:32.913 回答
0

Objective C 使用委托

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

于 2012-05-08T03:29:08.360 回答