1

私のニューススタンド アプリは、コンテンツを利用できるプッシュ通知を介して起動できます。これが発生した場合、問題のリストを取得し、最新の問題を含む 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 が呼び出されるようにしたいと思います。この問題はどのように解決できますか?

4

1 に答える 1

0

問題はMKNetworkKitとは何の関係もないことがわかりました。これらのタスクを完了するために、バックグラウンドタイムを購入するのを忘れました。

beginBackgroundTaskWithExpirationHandler-呼び出しの後にネットワーク関数が呼び出されると、正常に機能します。

于 2012-10-29T16:09:27.147 に答える