7

したがって、基本的には、ブロックの実行が終了した後にセグエを実行できる必要があります。私はいくつかのJSON処理を実行するブロックを持っており、それがいつ実行を終了したかを知る必要があります。

json_queueという名前のキューがあります。

jsonQueue = dispatch_queue_create("com.jaboston.jsonQueue", NULL);

次に、次の構文のdispatch_asyncブロックがあります。

  dispatch_async(jsonQueue, ^{
  [self doSomeJSON];
  [self performSegueWithIdentifier:@"modaltomenu" sender:self];
  });

「[selfperformSegueWithIdentifier:@ "modaltomenu" sender:self];」という行を実行できません。

メインスレッドまたはWebスレッド以外のスレッドからWebロックを取得しようとしました。これは、セカンダリスレッドからUIKitを呼び出した結果である可能性があります。今クラッシュしています...

スレッドがダーティな作業を行ったことを確認して、セグエを呼び出すことができるようにするには、どこで確認できますか?

素敵な人に感謝します。

PS:ビールとアップとテディベアと花は<3を助けることができる人に。

4

2 に答える 2

27

UIメソッドはメインスレッドでのみ呼び出す必要があります。メインキューにperformSegueWithIdentifier:をディスパッチしてみてください:

dispatch_async(jsonQueue, ^{
    [self doSomeJSON];
    dispatch_sync(dispatch_get_main_queue(), ^{
        [self performSegueWithIdentifier:@"modaltomenu" sender:self];
    });
});
于 2012-07-18T22:10:41.460 に答える
7
    dispatch_async(jsonQueue, ^{
        [self doSomeJSON];
        dispatch_async(dispatch_get_main_queue(), ^{
            [self performSegueWithIdentifier:@"modaltomenu" sender:self];
           //Finished with async block

        });
    });
于 2012-07-18T22:07:01.197 に答える