0

我正在使用archivedDataWithRootObject: / unarchiveObjectWithData : 方法来序列化/反序列化与要从我的应用程序中的设备加载的图像相关的字符串列表。

所以当unarchiveObjectWithData方法执行时:

[NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"basket"]]

它将调用initWithCoderPicture 类中的方法对每张图片进行反序列化。此方法从指定的 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];
    });
});

但它不起作用。

有什么建议么 ?

4

0 回答 0