我使用NSDATA从url下载图像,并使用将它们保存到本地文件系统
NSData *dataForStorage = [NSData dataWithData:UIImagePNGRepresentation(img)];
BOOL saveResult=[ dataForStorage writeToFile:jpegFilePath options:NSDataWritingAtomic error:&error];
NSLog(@"Write returned error: %@", [error localizedDescription]);我的应用程序随机崩溃,甚至没有给出一条消息,尽管一些文件被保存(再次随机)。当我在调试模式下运行应用程序时,我经常看到"EXC_BAD_ACCESS“,但继续执行会成功保存一些文件。
这段代码是在后台执行的:
[self performSelectorInBackground:@selector(loadImageInBackground:) withObject:arr];请提个建议。
发布于 2011-04-12 16:55:44
代码中的一个问题是,在没有自动释放池的线程中运行的代码,但正在使用需要自动释放池的函数。将以下代码放入loadImageInBackground方法中:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// existing code
[pool drain];这可能只是几个问题中的一个。为了获得进一步的帮助,我们需要查看崩溃的堆栈跟踪。
发布于 2011-04-11 20:25:23
猜测一下:arr是一个自动释放的对象,所以有时候它会在你的选择器被调用之前被释放。尝试使用[arr copy]并在保存后将其释放。
发布于 2011-05-19 01:59:02
我也遇到了同样的问题,但问题出在别的地方:我的URL过早地被释放了。最后,这就是我所做的,它起作用了:
我打了这个电话:
[self performSelectorInBackground:@selector(downloadData:) withObject:nil];这就是方法:
// URL - (NSString) URL for file
// filePath - (NSString) save location on device
-(void)download:(NSString *)URL
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:URL]];
[data writeToFile:filePath atomically:YES];
[pool release];
}所以我认为你的下载代码是正确的,但是还有一些其他的变量被提前释放了(可能是你的path)。
希望这能有所帮助!我知道这个页面上的其他答案对我有效。
https://stackoverflow.com/questions/5620354
复制相似问题