0

UIViewController *menuController呼び出す場所があるNSObject class *parserClassので、アプリケーションは xml の解析を開始NSDictionaryし、結果から を作成します。menuControllerその辞書に戻りたいと思います。

menuController私はこれを行います:

[parserClass startParsing:link];

次に、parserClass ですべて正常に動作しますが、作成した辞書をビュー コントローラーに戻すにはどうすればよいですか。

今、私は次の操作を行っていますが、これを行うための最良の方法ではありません:

  • パーサーがドキュメントを終了し、辞書の作成も終了したら、オブジェクトが添付されたローカル通知を作成し、View Controller でリスナーを作成します。リスナーが結果を受け取ると、そこからその辞書を取得します。

より良いアイデアはありますか?ありがとうございました。

ブロックの提案は気に入りましたが、次のように、コンプ行に到達する前にパーサーが終了しない場合はどうなりますか。

(void)startParsing:link withCompletionBlock:(myCompletion)comp {

parser = [[NSXMLParser alloc]initWithContentsOfURL:[NSURL URLWithString:link]];

[parse setDelegate:self]; [パースパース];

comp(results);

}

4

5 に答える 5

1

Grand Central Dispatch を使用すると、これをより速く、よりクリーンなコードで実現できます。最初にバックグラウンド キューで解析をディスパッチしてから、次のようにメイン スレッドで UI を更新します (常にメイン キューで UI を更新する必要があります)。

    dispatch_queue_t jsonParsingQueue = dispatch_queue_create("jsonParsingQueue", NULL);

        // execute a task on that queue asynchronously
        dispatch_async(jsonParsingQueue, ^{

    // do the parsing here

            // UI update code on the main thread (delegates, notifications, UI updates...)
            dispatch_async(dispatch_get_main_queue(), ^{

                //Update your UI here, for example [tableview reloadData]



            });
});
于 2013-10-29T13:21:03.990 に答える
0

ブロックの使用の実装は、ここで見つけることができます

于 2013-10-29T13:18:34.980 に答える