【发布时间】:2011-11-02 16:18:56
【问题描述】:
我打算下载并编码如下所示的图像。
但是我收到错误 -[NSKeyedArchiver encodeObject:forKey:]: archiver has finished;不能再编码任何东西'。谁能解释为什么会发生这个错误以及我该如何解决?
- (void)encodeWithCoder:(NSCoder *)encoder
{
dispatch_queue_t downloadQueue = dispatch_queue_create("image downloader", NULL);
dispatch_async(downloadQueue, ^{
NSURL *url = [NSURL URLWithString:self.avatar_url];
NSData *data = [NSData dataWithContentsOfURL:url];
dispatch_async(dispatch_get_main_queue(), ^{
self.avatar = [[[UIImage alloc] initWithData:data] autorelease];
[encoder encodeObject:UIImagePNGRepresentation(self.avatar) forKey:@"avatar"];
});
});
}
错误堆栈
2011-11-03 00:08:32.645 onethingaday[6897:207] *** Terminating app due to uncaught exception 'NSInvalidArchiveOperationException', reason: '*** -[NSKeyedArchiver encodeObject:forKey:]: archiver has finished; cannot encode anything more'
*** First throw call stack:
(0x29de052 0x26ddd0a 0x2986a78 0x29869e9 0x16e1d40 0x9fdd 0x1d33445 0x1d354f0 0x2915833 0x2914db4 0x2914ccb 0x2d57879 0x2d5793e 0xd89a9b 0x290d 0x2885 0x1)
【问题讨论】:
-
因为下载图像导致我的应用程序挂起,因此我想使用 GCD 使其异步。这里使用 GCD 有什么问题吗?
标签: objective-c ios cocoa-touch uiimage grand-central-dispatch