0

メインビューで要求されたときにスクロールビュー用にいくつかの画像をロードするために実行されるスレッド(具体的にはNSOperation)があります。これらのNSOperationは、一度にいくつでもキューに入れることができます。したがって、指定したファイルパスに沿って、ディスクから画像を(UIImagesとして)ロードし、performSelectorOnMainThread:を使用してオブジェクトをメインビューに送り返し、メインビューにオブジェクトのNSDictionaryと画像ID値を渡します。次に、メインビューは、メインビューが使用できるようにするために必要なNSMutableDictionaryに画像オブジェクトと画像ID文字列を挿入することになっています。NSMutableDictionaryが正常に割り当てられ、初期化されていることを確認しましたが、NSOperationが呼び出すメソッドがオブジェクトをディクショナリに追加しようとしても、何も起こりません。私' スレッドが送ってくれた辞書から取得したオブジェクトと文字列がnullでも何でもないことを確認しましたが、それでも機能しません。私は何か正しいことをしていませんか、それとも悪いテクニックを使っていませんか?スレッドからNSMutableDictionaryにUIImagesを追加する必要があるこのような状況で、誰かが何を提案しますか?本当にありがとう!

これが私が使用するNSOperationコードです:

- (void)main {
    NSString *filePath = [applicaitonAPI getFilePathForCachedImageWithID:imageID andSize:imageSize];
    UIImage *returnImage = [[UIImage alloc] initWithContentsOfFile:filePath];

    if (returnImage) {
        NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:2];
        [dict setObject:returnImage forKey:@"IMAGE"];
        [dict setValue:[NSString stringWithFormat:@"%d", imageID] forKey:@"IMAGE_ID"];
        NSDictionary *returnDict = [[NSDictionary alloc] initWithDictionary:dict];
        [dict release];
        [mainViewController performSelectorOnMainThread:@selector(imageLoaderLoadedImage:) withObject:returnDict waitUntilDone:NO];
        [returnDict release];
    }
}

そして、これがメインスレッドのメソッドです:

- (void)imageLoaderLoadedImage:(NSDictionary *)dict {
  UIImage *loadedImage = [dict objectForKey:@"IMAGE"];
  NSString *loadedImage = [dict valueForKey:@"IMAGE_ID"];
  [imagesInMemoryDictionary setObject:loadedImage forKey:loadedImageID];
  [self drawItemsToScrollView];
}
4

1 に答える 1

1
[mainViewController performSelectorOnMainThread:@selector(imageLoaderLoadedImage:) withObject:nil waitUntilDone:NO];

returnDictパラメータとしてメソッドに渡していない。あなたは合格していますnil

他のいくつかの考え:

  • を作成する必要はありませんreturnDictdictメソッドパラメータとして使用できます。
  • あなたは漏れていますreturnImage

編集

どうやらあなたはパラメータとしてメソッドに渡しているようですのでreturnDict私の他の推測はそれがmainViewControllerですnil。それ以外は、コードは機能しているように見えます。

于 2010-08-28T17:54:38.797 に答える