0

iOS 開発 (およびプログラミング) の初心者として、単純だと思うことを達成しようとしていますが、コードを書くのに助けが必要です。

いくつかの Facebook オブジェクトを含む可変配列があります。配列は facebookPhotosAllTemporary と呼ばれます。配列を反復処理し、各インデックスで各オブジェクト (UIImage) を取り出し、それらの各画像を facebookPhotosAll という新しい配列に挿入します。これが私が現在持っているコードです:

実装には、プライベートメソッドがあります:

- (void) addImagestoArray {
int i;
for (i = 0; i < [facebookPhotosAllTemporary count]; i++) {
    UIImage *image = [UIImage imageWithData:
                           [NSData dataWithContentsOfURL:
                            [NSURL URLWithString:
                             [[facebookPhotosAllTemporary objectAtIndex:i]
                              objectForKey:@"pic_big"]]]];
    [facebookPhotosAll addObject:image];
           }
}

次に、viewDidLoad セクションでメソッドを呼び出します。

[self addImagestoArray];

実行すると、オブジェクトを追加しようとしている配列にオブジェクトがないと NSLog メッセージが表示されます。

私のコードには完全な欠陥がある可能性があることに気付きました! しかし、誰かが私を正しい軌道に乗せることができますか? ありがとう!

4

1 に答える 1

2

ここにはいくつかの問題があります。

  1. facebookPhotosAllを割り当てて初期化しましたか?つまり、initメソッドやviewDidLoadなどのどこかで、次のようなことをしましたか。

    facebookPhotosAll = [[NSMutableArray alloc] init];

  2. アプリのメインスレッドでインターネットから一連の画像を同期的に読み込んでいます。これにより、ユーザーインターフェイスがハングします。最良のケースは、これによりアプリが一時的にフリーズしたように見えることです。最悪の場合、これに時間がかかりすぎると、OSが応答に失敗したためにアプリを強制終了します。

  3. 画像を取得するために書いた行は、厄介で読みにくく、デバッグが困難です。それを5行に分割します。このようにして、問題が発生した場合に各部分を確認できます。

問題2に対処するには、Appleが提供するLazyTableImagesサンプルアプリを参照する必要があります。これは、バックグラウンドで画像をロードする適切な方法を示しています。メインスレッドで同期インターネットアクセスを行わないでください。

于 2012-10-13T19:21:04.890 に答える