0

サーバーからデータをロードするために NSURLConnection 非同期呼び出しを使用しています。メインスレッドで適切なデータが得られますが、UI がフリーズします。1) performSelectorInBackground を使用して非同期呼び出しを行う方法 データを非同期的にロードすることによって何が間違っているのか。

どんな助けでも大歓迎です

4

3 に答える 3

0

NSURLConnection 経由ではありませんが、ブロックされない方法は次のとおりです。

NSURL *xmlURL = [NSURL URLWithString:URL];

if (self.xmlParser != nil)
{
    [self.xmlParser abortParsing];
    self.xmlParser = nil;
}

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

// Use another thread to avoid blocking main thread

dispatch_async(loadQueue1,^{

self.xmlParser = [[[NSXMLParser alloc] initWithContentsOfURL:xmlURL] autorelease];

// -------------------------------------------------------------------
[self.xmlParser setDelegate:self];


dispatch_async(dispatch_get_main_queue(),^{
if (self.xmlParser != nil)
{
    [self.xmlParser  parse];
}

    });


});

dispatch_release(loadQueue1);
于 2012-10-16T01:21:57.650 に答える
0

OK、コードをデバッグした後、エラーが発生しました。非同期呼び出しではありませんが、巨大な応答を受け取った後の更新メソッドが UI をフリーズさせます。また、データを印刷するために配置した NSLog も問題を引き起こします。

于 2012-10-17T07:04:04.467 に答える
0

非同期 API で使用する場合は、使用NSURLConnectionする必要はありませんperformSelectorInBackground。メインスレッドから呼び出し、デリゲートを設定すると、メインスレッドをブロックすることなく、データが来るか別のイベントが発生したときにデリゲートが呼び出されます。

于 2012-10-17T08:12:30.333 に答える