我有以下代码来启动我自己的Cocoa HTTP Server。为了手动处理响应,我创建了名为HTTPConnection
PictureHTTPConnection
类
self.httpServer = [[HTTPServer alloc]init];
self.httpServer.type = @"_http._tcp.";
self.httpServer.name = @"MyBonjour Name";
self.httpServer.connectionClass = [PictureHTTPConnection class];
这里的问题是PictureHTTPConnection
类需要一些信息才能处理HTTP连接。但是,我只提供类,因此我没有对实例的引用。我可以用全局数据做一些事情,但这不是很好的编程实践。
我能想到的最好的方法是将PictureHTTPConnection
的委托设置为UIApplicationDelegate
,以便它可以回答任何回调。 : - (
答案 0 :(得分:1)
我遇到了同样的问题。为了解决这个问题,我更改了HTTPServer
类的代码,以便您可以设置delegate
,然后在创建的每个HTTPConnection
上设置HTTPConnection
。当{{1}}必须处理请求时,我会调用该委托。这远非干净,我正在寻求更好的解决方案。
答案 1 :(得分:0)
您可以通过向HTTPServer添加类别来获取回调。设置一个代表。 objc_setAssociatedObject
是你的朋友:
@interface HTTPServer (WithDelegate)
@property (strong, nonatomic) id delegate;
@end
@implementation HTTPServer (WithDelegate)
NSString const *key = @"HttpServer.WithDelegate.key";
- (void)setDelegate:(id)delegate
{
objc_setAssociatedObject(self, &key, delegate, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (id)delegate
{
return objc_getAssociatedObject(self, &key);
}
@end
初始化HTTPServer实例时(或随时)设置委托。从您的自定义HTTPConnection实现调用它上面的方法,如下所示:
[config.server.delegate handleRequest:theRequest];
您必须在委托类中实施handleRequest:(Whatever*)theRequest