我如何知道哪个对象正在向代理请求信息?
How do I know which object is asking the delegate for information?
在我的设计中,选择器告诉应用程序控制器用户希望在两个视图中的每一个中看到多少项以及哪种颜色。我有一个 NSView 对象描述(myView.h,myView.m),控制器实例化了两次。当用户调整一个选择器来改变,比方说,在 viewOne 中绘制的项目数量,App Controller 更新它的这个数量的本地变量,并告诉 viewOne 重新绘制自己。作为重绘自身的一部分,viewOne 需要询问代理(App Controller)要绘制多少项目。当通过协议发生这种情况时,委托人通过什么机制知道请求 qty 变量的是 viewOne? 即委托人如何知道要响应哪个变量?
delegate/data 源代码调用的第一个参数按照惯例是委托对象,例如:
- (void)applicationDidFinishLaunching:(NSApplication *)app;
- (NSTableRowView *)tableView:(NSTableView *)tableView
rowViewForRow:(NSInteger)row;
在这些方法中,app
和 tableView
将成为请求者。
您应该编写自己的委托协议来遵循此模式。
Apple 的 概念 Objective-C 的 "Delegates and Data Sources" chapter 中有更多内容,尽管严格来说这与语言本身无关:它是来自Cocoa(触摸)框架。
我发现我可以(不确定是否应该)在委托例程中使用 isEqual: 来确定调用了哪个对象:
- (int)numberOfItemsInTheView:(myView *)aView {
int itemCount = 0;
if([aView isEqual:[self viewOne]]) {
itemCount = 5;
} else if([aView isEqual:[self viewTwo]]) {
itemCount = 18;
}
return itemCount;
}
是isEqual portion/statement 我没有意识到或不理解。关于 Josh 的回答,我可以看出我可能没有完全理解 protocol/delegate 编码结构的含义 and/or 要求(约定?)。
在我的设计中,选择器告诉应用程序控制器用户希望在两个视图中的每一个中看到多少项以及哪种颜色。我有一个 NSView 对象描述(myView.h,myView.m),控制器实例化了两次。当用户调整一个选择器来改变,比方说,在 viewOne 中绘制的项目数量,App Controller 更新它的这个数量的本地变量,并告诉 viewOne 重新绘制自己。作为重绘自身的一部分,viewOne 需要询问代理(App Controller)要绘制多少项目。当通过协议发生这种情况时,委托人通过什么机制知道请求 qty 变量的是 viewOne? 即委托人如何知道要响应哪个变量?
delegate/data 源代码调用的第一个参数按照惯例是委托对象,例如:
- (void)applicationDidFinishLaunching:(NSApplication *)app;
- (NSTableRowView *)tableView:(NSTableView *)tableView
rowViewForRow:(NSInteger)row;
在这些方法中,app
和 tableView
将成为请求者。
您应该编写自己的委托协议来遵循此模式。
Apple 的 概念 Objective-C 的 "Delegates and Data Sources" chapter 中有更多内容,尽管严格来说这与语言本身无关:它是来自Cocoa(触摸)框架。
我发现我可以(不确定是否应该)在委托例程中使用 isEqual: 来确定调用了哪个对象:
- (int)numberOfItemsInTheView:(myView *)aView {
int itemCount = 0;
if([aView isEqual:[self viewOne]]) {
itemCount = 5;
} else if([aView isEqual:[self viewTwo]]) {
itemCount = 18;
}
return itemCount;
}
是isEqual portion/statement 我没有意识到或不理解。关于 Josh 的回答,我可以看出我可能没有完全理解 protocol/delegate 编码结构的含义 and/or 要求(约定?)。