gpt4 book ai didi

iphone - 图像未添加到 NSOperation 内的 NSMutableDictionary

转载 作者:行者123 更新时间:2023-12-03 18:02:30 25 4
gpt4 key购买 nike

所以我首先使用 NSOperationQueue 在 View Controller 中编写了所有方法。经过一些研究和大量阅读后,我意识到我必须对 loadImage 操作进行子类化,以便我可以使用 isCancelled 和 cancelAllOperations。所以我继续创建一个 nsoperation 类并从我的 View Controller 中调用它。所有方法都被调用,甚至 imageLoaded,但 NSMutableDictionary 仍然为空。我使用字典以 url 作为键来填充我的 tableviewcells。另请注意, View Controller 中的操作调用是在 View 加载时由 NSInitationOperation 调用的方法内。

@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];
}

在 View Controller 上创建 nsoperation

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];

}

最佳答案

如果运行没有异常并且字典仍然为空,则很可能意味着您的值为零。

这是代码中的一个常见问题,在这种代码中,一种方法的结果会进入下一种方法。任何时候如果出现问题,链条的其余部分都将无法工作。

为了解决这个问题,我将从您将图像分配给字典的位置开始。您可以使用断点或 NSLog 来确定该点图像的值。我更喜欢使用 NSLog,但断点可以让您一次查看所有值。如果scaledImage为零,则检查myImage。继续沿着链向上返回,直到找到值(value)从您期望的值变为零的点。

关于iphone - 图像未添加到 NSOperation 内的 NSMutableDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4910497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com