【发布时间】:2012-10-30 13:24:41
【问题描述】:
我是 MKNetworkKit 的新手,但我已经能够将其添加到我的项目中,并且除了处理可达性更改外,它运行良好。
情况如下:
- 我禁用 WiFi 并运行应用程序。
- 即使没有可达性,我通过从我的
MKNetworkEngine子类创建一个MKNetworkOperation来请求(使用POST)一些数据。在请求数据之前,该操作被设置为可冻结(根据Mugunth Kumar's doc)。 - 启用 WiFi 后,
MKNetworkEngine中的checkAndRestoreFrozenOperations被调用,它检测到有一个挂起的操作(创建时没有可达性),它试图入队。 - 在那之后,我的
onCompletion块永远不会被调用。
对于MKNetworkKit 中的冻结操作+可达性,我有什么不明白的地方吗?冻结是否仅适用于请求开始后可达性发生变化的操作?或者我应该实现我自己的 reachability changed 块?
这是我的MKNetworkEngine 子类中创建操作并启动请求的代码。请注意,不相关的代码已被禁止。
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObject:@"value" forKey:@"param"];
MKNetworkOperation *op = [self operationWithPath:MYPATH
params:params
httpMethod:@"POST"];
[op setFreezable:YES];
[op onCompletion:^(MKNetworkOperation *completedOperation) {
// ...
// Here is where I process response and send the result to my completion block
// It's called when WiFi is available, but not called otherwise.
// ...
} onError:^(NSError *error) {
// It's called when WiFi is available, but not called otherwise.
DLog(@"Some error");
}];
[self enqueueOperation:op];
return op;
【问题讨论】:
-
你在引擎中设置了主机吗?如果您查看如何处理冻结操作,除非为引擎定义了主机,否则它们将不起作用。
-
@KenWoo 是的。我的引擎子类中的 init 方法调用
[super initWithHostName:<HOSTNAME>]。 -
@msoler 你让它工作了吗?我也有类似的问题
-
@alandalusi 不,对不起。我一直忙于项目的几个部分,几乎忘记了这一点。我试图联系 MKNetworkKit 的开发者,但没有得到回应。
-
如果你通过 checkAndRestoreFrozenOperations 函数,它会创建新的 MKOperation,所以你的块不会被调用。但问题是在这种情况下,post 数据没有上传到服务器。
标签: ios network-programming mknetworkkit mknetworkengine