1

我有以下代码来启动我自己的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以便它可以回答任何回调。:-(

4

2 回答 2

1

我有同样的问题。为了解决这个问题,我更改了HTTPServer类的代码,以便您可以将其设置delegate为依次在每个HTTPConnection创建的对象上设置。当HTTPConnection必须处理请求时,我会打电话给代表。这也远非干净,我正在寻找更好的解决方案。

于 2012-01-26T11:30:34.627 回答
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在您的委托类中实现

于 2015-03-09T05:47:33.787 回答