Итак, я сначала закодировал все свои методы в контроллере представления с помощью NSOperationQueue.Проведя некоторые исследования и много прочитав, я понял, что мне нужно разделить мою операцию loadImage, чтобы я мог использовать isCancelled и cancelAllOperations.Поэтому я решил создать класс nsoperation и вызвать его из моего viewcontroller.ALI методы вызываются, даже imageLoaded, но NSMutableDictionary остается пустым.Я использую словарь для заполнения ячеек таблицы, используя URL в качестве ключа.Также имейте в виду, что вызов операции в viewcontroller находится внутри метода, который вызывается NSInvocationOperation при загрузке представления.
@interface loadImages : NSOperation {
NSURL *targetURL;
}
@property(retain) NSURL *targetURL;
- (id)initWithURL:(NSURL*)url;
@end
реализация класса nsoperation, который включает в себя некоторые другие вызовы для изменения размера изображения
@implementation loadImages
@synthesize targetURL;
- (id)initWithURL:(NSURL*)url
{
if (![super init]) return nil;
[self setTargetURL:url];
return self;
}
- (void)dealloc {
[targetURL release], targetURL = nil;
[super dealloc];
}
- (void)main {
NSLog(@"loadImages.m reached");
StoriesTableViewController *stories = [[StoriesTableViewController alloc] init];
NSMutableDictionary *tempDict = stories.filteredImagesDict;
UIImage *myImage = [[[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[self targetURL]]]autorelease];
UIImage *scaledImage = [[[UIImage alloc] init] autorelease];
CGRect frame = CGRectMake(100.0f, 100.0f, 180.0f, 180.0f);
UIImageView *myImageFrame = [[UIImageView alloc] initWithFrame:frame];
myImage = [[myImage croppedImage:[myImageFrame bounds]]retain];
scaledImage = [[myImage resizedImage:CGSizeMake(120.0f, 120.0f) interpolationQuality:kCGInterpolationHigh]retain];
[tempDict setValue:scaledImage forKey:[self targetURL]];
[stories performSelectorOnMainThread:@selector(imageLoaded:)
withObject:myImage
waitUntilDone:YES];
NSLog(@"targetURL %@",[self targetURL]);
NSLog(@"tempDict count: %d",tempDict.count);
[stories release];
[myImage release];
[myImageFrame release];
[scaledImage release];
}
создание операции на viewcontroller
for(int i=0;i<storyQuantity;i++) {
NSString *imageString = [[[storiesArray objectAtIndex:i] objectForKey: @"image"] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; // must add trimming to remove characters
NSURL *url = [NSURL URLWithString:imageString];
loadImages *imageOperation = [[loadImages alloc] initWithURL:url];
[queue_ addOperation:imageOperation];
[imageOperation release];
}