0

このブロックを呼び出すと:

NSURLSession *session = [NSURLSession sharedSession];
    [[session dataTaskWithURL:url
            completionHandler:^(NSData *data,
                                NSURLResponse *response,
                                NSError *error) {

                 _data = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

                _label.text = [NSString stringWithFormat:@"%@°",([[[self.data objectForKey:@"main"] objectForKey:@"temp"] floatValue]) - 273.15)];

            NSLog(@"%@",self.data);


            }] resume];

NSLog が呼び出されても、ブロック内のコードの実行に時間がかかります - 何が起こっているのでしょうか? あらゆる種類のソリューションを試しましたが、何も機能していません。

4

3 に答える 3

1

UI 更新関連のタスクは常にメイン スレッドで実行してください。そうしないと、UI の実行に時間がかかります。

お気に入り、

  1. ラベル テキストを更新しています。
  2. ImageView に画像を設定します。
  3. タイマー関連の操作。

したがって、以下のコードを使用してください

dispatch_async(dispatch_get_main_queue(), ^{
            _label.text = [NSString stringWithFormat:@"%@°",([[[self.data objectForKey:@"main"] objectForKey:@"temp"] floatValue]) - 273.15)];
}
于 2015-06-21T03:54:52.237 に答える
0

このコードを試してください:

dispatch_async(dispatch_get_main_queue(), ^{
   _label.text = [NSString stringWithFormat:@"%@°",([[[self.data objectForKey:@"main"] objectForKey:@"temp"] floatValue]) - 273.15)];
}

ラベルを設定するとき。

理由:

おそらくメイン スレッドを使用していないため、別のスレッドから UI を更新するべきではありません。現在、これを行っても iOS がクラッシュすることはなくなりましたが、それでも遅れをとっています。

于 2015-06-20T10:32:30.440 に答える