在我的项目中,我有一个单例模型类,APIModel
它处理对 API 的所有必要调用。我RestKit
经常使用和设置 HTTP 标头。
这是我的问题:
AModel
- (void)makeRequest {
[APIModel apiObject].getSpecificDataDelegate = self;
[[APIModel apiObject] loadSpecificData];
}
BModel
- (void)makeRequest {
[APIModel apiObject].getSpecificDataDelegate = self; // removes AModel as delegate so it ends up receiving both responses
[[APIModel apiObject] loadSpecificData];
}
AModel
将自己设置为委托,然后BModel
将自己设置为委托。BModel
最终收到两个 API 响应。
我解决这个问题的解决方案是APIModel
为每个需要它的类启动不同的实例。
- (void)makeRequest {
self.apiObject.getSpecificDataDelegate = self;
[self.apiObject loadSpecificData];
}
- (APIModel *)apiObject {
if (!_apiObject) apiObject = [[APIModel alloc] init]; // classes own instance
return _apiObject;
}
出于某种原因,尽管所有这些APIModel
实例都没有适当地将 HTTP 标头附加到请求中,所以它们在 API 端都失败了。任何仍在使用单例对象的模型仍然可以正常工作。
我认为这是 RKClient 的单例(sharedClient)的问题,但不确定。它不是 nil,我可以设置 HTTP 标头甚至将它们打印出来,但我的 API 不断抛出异常。当不使用单例时,HTTP 标头无法将自己附加到请求中是否有任何明显的原因?我可以利用不同的或更好的设计模式吗?
我发现了这个问题,虽然很有见地,但它与我的问题并不完全相关,但有没有办法做类似的事情?
我考虑过使用NSNotificationCenter
,但随后需要传递更多信息以允许AModel
并BModel
知道哪些数据适合他们。