0

我有一个线程(特别是一个 NSOperation),当我的主视图要求它们时,它运行为我加载一些图像以用于滚动视图。任何数量的这些 NSOperations 都可以一次排队。所以它与我给它的文件路径一起使用并从磁盘加载图像(作为 UIImages),然后通过使用 performSelectorOnMainThread 将对象发送回我的主视图:并向我的主视图传递对象的 NSDictionary 和图像 ID 值。然后,我的主视图应该将图像对象和图像 ID 字符串插入到 NSMutableDictionary 中,以便主视图能够使用。我已经验证了 NSMutableDictionary 的分配和初始化很好,但是当 NSOperation 调用的方法尝试将对象添加到字典中时,什么也没有发生。我' 已经验证了我从线程发送给我的字典中得到的对象和字符串不是 null 或任何东西,但它不起作用。我是不是在做正确的事情或使用了不好的技术?在我需要从线程将 UIImages 添加到 NSMutableDictionary 的这种情况下,有人会建议做什么?非常感谢!

这是我使用的 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

其他一些想法:

  • 你不需要创建returnDict. 您可以只dict用作方法参数。
  • 你在泄漏returnImage

编辑

由于您显然作为参数传递returnDict给该方法,因此我的另一个猜测mainViewControllernil. 除此之外,您的代码看起来很实用。

于 2010-08-28T17:54:38.797 回答