gpt4 book ai didi

objective-c - Objective-C 中的委托(delegate)查询

转载 作者:行者123 更新时间:2023-12-03 17:32:33 24 4
gpt4 key购买 nike

所以,我对委托(delegate)的作用、为什么使用它、如何实现它等有一个很好的了解,并且我正在努力在我的一个项目中实现它。我试图解决的问题是将我的 Controller 对象与我的网络访问类分离。在这种情况下,我脑子里的想法变得有点困惑。

我直觉地认为 NetworkAccessClass 应该是 Controller 对象的委托(delegate),因为 NetworkAccessClass 充当 Controller 对象的助手。但它似乎以相反的方式工作,因为以下显然是正确的方法:

NetworkaccessClass.h

@protocol NetworkAccessDelegate
-(void) requestSucceded:(NSData *) data
-(void) requestFailed:(int) responseCode;
@end
@interface NetworkAccessClass : NSObject
{
id<NetworkAccessDelegate> networkDelegate;
}

@property(nonatomic, assign) id networkDelegate;

-(void) initWithDelegate:(id) delegate; //

@end

NetworkAccessClass.m

@implementation
@synthesize networkDelegate

-(void) initWithParams:(id) delegate
{
networkDelegate = delegate;
// Assign GET/POST vals, create request etc
[request startAsynchronous];
}

-(void) requestSucceded:(ASIHTTPRequest *) request
{
if([networkDelegate respondsToSelector:@selector(requestSucceded:)]) {
// Send the data to the controller object for it to use
...
}
}

-(void) requestFailed:(ASIHTTPRequest *) request
{
// Same as above. Send to request failed.
}

@end

最后在我的 FirstViewController.h

#import "NetworkAccessClass.h"
@interface FirstViewController<NetworkAccessDelegate>
{

}
-(void) requestSucceded:(NSData *) data;
-(void) requestFailed:(int) responseCode;
@end

SecondViewController.h 中也是如此,依此类推。

虽然这确实将我的 Controller 与网络类解耦,但我不禁觉得这是错误的,因为在这种情况下, Controller 充当委托(delegate)或辅助方法网络类,而不是相反。我错过了一些基本的东西吗?或者事实就是如此?

谢谢,
泰贾。

最佳答案

委托(delegate)不是“辅助方法”。将它们视为在发生事件时收到通知的对象。 (尽管不要将它们与“通知”混淆——那是完全不同的事情。)在这种情况下,您的网络类会执行它的操作,然后在实例化并触发的 View Controller 上调用其委托(delegate)方法,以报告内容对 View Controller 的响应。然后, Controller 可能会使用网络连接器获取的数据更新 View 。经典的委托(delegate)模式,就在那里。

关于objective-c - Objective-C 中的委托(delegate)查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5109751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com