2011-08-10 11 views
1

私はstringWithcontentsofurlを使用して私のWebサーバーからアプリケーションにいくつかの文字列をダウンロードしていますが、何らかの種類のローダを表示するUIを更新したいと思います。私は数多くの文字列をダウンロードしています(時には100を超えることもあります)ので、ユーザーが何かを見せてくれるので、Appがクラッシュしていないことを知っているので、UIが止まって表示できませんUILoaderなど。そうするオプションはありますか?あるいは、これが可能なstringWithcontentsofurlの代替手段でしょうか?stringWithContentsofurlを使用するとUIを更新します

挨拶し、 エリック

答えて

0

これは、「レイジーローディング」の典型的なケースです。 Appleのサンプルコードを参照してください。

http://developer.apple.com/library/ios/#samplecode/LazyTableImages/Introduction/Intro.html

あなたがそのコードを読んで「画像」のための「文字列」を代用することは容易でなければなりません。

"(情報を取得しています)"などのラベルにプレースホルダを表示し、バックグラウンドで情報をロードする場合は、フェッチを自分でスレッド化する(非同期フェッチ)か、ASIHTTPRequestのようなライブラリを使用してフェッチが完了したらデリゲートメソッドを呼び出す非同期のナットとボルト。

0

は残念ながら、stringWithContentsOfURLは、それはあなたのスレッドをブロックし、それを実行している間、あなたが任意のコールバックを受け取ることはありません意味、同期メソッドです。これはユーザーエクスペリエンスにとっても悪いことです。

代わりにNSURLConnectionを使用して、独自のリクエストを手動で設定し、接続の代理メソッドにアクセスして、何らかの進行状況バーを表示することができます。具体的には、connection:didReceiveData:connectionDidFinishLoading:

を受け取ったら、次のコードを使用して文字列を取得します。

NSString *theString = [[NSString alloc] initWithData:yourData encoding:UTF8StringEncoding]; 
+0

私は 'sendAsynchronousRequest:queue:completionHandler:'メソッドを見つけましたが、実際には理解できません。 –

+0

このメソッドは現在、Mac OS X 10.7の 'NSURLConnection'でのみ利用可能です。 iOSの場合、新しい 'NSURLRequest'を作成し、次に' connectionWithRequest:delegate:startImmediately: 'メソッドを使いたいとします。 Appleには良い例があります - http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html – Ricky

0

この方法を非同期化するには、Grand Central Dispatchを使用することが推奨されます。誰かが興味があれば、私はそれを行うためのコードをいくつか示します。

3

これを試してください。それはバックグラウンドで物を積みます。後で(asyncloadで)UIを更新する場合は、必ずメインスレッドでそれを行うようにしてください。

-(void)loadappdetails:(NSString*)appid { 
    NSString* searchurl = [@"https://itunes.apple.com/lookup?id=" stringByAppendingString:appid]; 

    [self performSelectorInBackground:@selector(asyncload:) withObject:searchurl]; 

} 
-(void)asyncload:(NSString*)searchurl { 
    NSURL* url = [NSURL URLWithString:searchurl]; 
    NSError* error = nil; 
    NSString* str = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error]; 
    if (error != nil) { 
     NSLog(@"Error: %@", error); 
    } 
    NSLog(@"str: %@", str); 
} 
+0

ありがとう!それは期待どおりに働いた:) –

関連する問題