等到unarchiveObjectWithData方法完成

时间:2014-05-20 08:41:51

标签: ios objective-c nskeyedarchiver nskeyedunarchiver

我使用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];
    });
});

但它没有用。

有什么建议吗?

0 个答案:

没有答案
相关问题