如何在通过内容可用通知启动的报亭应用程序中使用MKNetworkKit执行GET请求

时间:2012-10-29 15:26:26

标签: ios6 apple-push-notifications newsstand-kit mknetworkkit

我的报亭应用可以通过内容推送通知启动。 发生这种情况时,应检索问题列表,并下载包含最新问题的zip文件。

我无法检索问题列表。仅当通过内容可用的推送通知启动应用程序时,才会出现此问题。手动启动应用程序时一切正常。

这段代码下载了issuelist:

-(MKNetworkOperation*)getIssueList:(void(^)(NSArray *issues, BOOL cacheResponse))completionBlock
                             onError:(MKNKErrorBlock) errorBlock{
    MKNetworkOperation *op = [self operationWithPath:@"list/"
                                              params:nil
                                          httpMethod:@"GET"];
    NSLog(@"in getissuelist");

    [op onCompletion:^(MKNetworkOperation *completedOperation)
     {
         NSLog(@"in getissuelist on completion");
         BOOL cachedResponse = NO;
         if([completedOperation isCachedResponse]) {
             cachedResponse = YES;
         }

         NSArray *issueDicts = [completedOperation responseJSON];
         completionBlock(issueDicts, cachedResponse);

     }onError:^(NSError* error) {
         NSLog(@"in getissuelist on error");
         errorBlock(error);
     }];

    [self enqueueOperation:op];

    NSLog(@"in getissuelist return op");
    return op;
}

这是通过通知

启动应用程序时的控制台输出
Oct 29 16:06:42 murzofoon newsstand[2373] <Warning>: start download latest
Oct 29 16:06:42 murzofoon newsstand[2373] <Warning>: in getissuelist
Oct 29 16:06:42 murzofoon newsstand[2373] <Warning>: in getissuelist return op

因此操作已入队,但未调用onCompletion(和onError)块。

当我在收到通知后手动启动应用程序时,会调用onCompletion块。

Oct 29 16:06:54 murzofoon newsstand[2373] <Warning>: in getissuelist on completion

在我手动启动应用程序之前,似乎没有处理MKNetworkOperation。即使我没有手动启动应用程序,我也希望调用onCompletionblock。如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

事实证明,问题与MKNetworkKit无关。我忘了买一些背景时间来完成这些任务。

在beginBackgroundTaskWithExpirationHandler-call之后调用网络函数时,它们工作得很好。