我有一个线程(特别是一个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];
}
答案 0 :(得分:1)
[mainViewController performSelectorOnMainThread:@selector(imageLoaderLoadedImage:) withObject:nil waitUntilDone:NO];
您没有将returnDict
作为参数传递给方法。你正在通过nil
。
其他一些想法:
returnDict
。您只需使用dict
作为方法参数。returnImage
。修改强>
由于您显然 将returnDict
作为参数传递给方法,我的另一个猜测是mainViewController
是nil
。除此之外,您的代码看起来很实用。