我使用archivedDataWithRootObject: / unarchiveObjectWithData:方法序列化/反序列化相对于要从我的应用中的设备加载的图片的字符串列表。
所以当执行unarchiveObjectWithData
方法时:
[NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"basket"]]
它将从Picture类调用initWithCoder
方法为每个图片反序列化。此方法从指定的URL检索资产:
[[[ALAssetsLibrary alloc] init] assetForURL: [[NSURL alloc] initWithString:[aDecoder decodeObjectForKey:@"imageUrl"];] resultBlock:^(ALAsset *asset) {
if (asset)
{
self.picture = asset;
}
} failureBlock:^(NSError *error) {
}];
我在self.picture = asset;
上设置了断点,并看到图片已成功检索。
然后,在调用unarchiveObjectWithData
方法之后,我希望在UIImageViews
上显示检索到的图像。但我看到UIImageViews在成功检索图片之前显示在屏幕上。所以UIImageViews总是空的。
我会在显示图像之前等待unarchiveObjectWithData
方法。
我尝试过这样的事情:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
[BasketManager setSharedInstance:[NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"basket"]]];
dispatch_async(dispatch_get_main_queue(), ^{
UIImageView *myImageView = [[UIImageView alloc] initWithImage:[(Picture *)BasketItemByID([(NSMutableDictionary *)CurrentBasket allKeys][0]) picture]];
[self.view addSubview:myImageView];
});
});
但它没有用。
有什么建议吗?