Obj-C クラスの 1 つの一部を iWatch でも実行できるように変換しようとしています。そのために、NSURLSession dataTaskWithRequest: の代わりに NSURLConnection sendAsynchronousRequest: を使用する必要があります。つまり、XML が正しく読み込まれて解釈されます)、元のコード内で、メイン プログラムのいくつかの NSNotification をトリガーして、目に見える変更を加えました。
NSURLSession completionHandler 内では、もう機能しないようです。
元のコードは次のとおりです。
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSDictionary *answer = [NSDictionary dictionaryWithXMLString:result];
[[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_START_UPDATING object:nil userInfo:nil];
/* DO SOME STUFF THERE */
[[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_UPDATING_COMPLETE object:nil userInfo:answer];
}];
修正版は次のようになります。
NSURLSessionDataTask *subDataTask = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSDictionary *answer = [NSDictionary dictionaryWithXMLString:result];
[[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_START_UPDATING object:nil userInfo:nil];
/* DO SOME STUFF THERE */
[[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_UPDATING_COMPLETE object:nil userInfo:answer];
}];
[subDataTask resume];
クレイジーなのは、最初のバージョンでは正常に機能する2番目の方法を使用して、両方の通知が送受信されないことです。
同様に、別の同じ状況で、次のように呼び出されるタイマー呼び出しがあります。
if (autoRefresh)
refreshTimer = [NSTimer scheduledTimerWithTimeInterval:10.0f target:self selector:@selector(refreshInformationTimer:) userInfo:nil repeats:NO];
ここでも、NSURLConnection を使用して動作しますが、NSURLSessionDataTask 内では動作しません...
これについて私を助けてもらえますか?
どうもありがとう。