如何在Firebase Storge中下载文件夹中的所有图像(Objective-C)

时间:2016-07-06 03:17:04

标签: objective-c firebase-storage

我在Storage Firebase中有一个文件夹图像,我想下载所有图像并在我的collectionview中显示它们。 但是当我想在文件夹中获得索引图像时,我遇到了问题。 我怎么能这样做。

感谢您的帮助!

self.storageRef = [[FIRStorage storage] reference];
self.imagesArray = [[NSMutableArray alloc]init];


[[self.storageRef child:@"IMAGES"] dataWithMaxSize:1 * 1024 * 1024 completion:^(NSData *data, NSError *error) {
    UIImage *image = [UIImage imageWithData:data];
    [self.imagesArray addObject:image];

}];
self.imageView.image = self.imagesArray.firstObject;

//我的错误:原因:'*** - [__ NSArrayM insertObject:atIndex:]:对象不能为零'

Picture of Storage Firebase

1 个答案:

答案 0 :(得分:1)

在查看代码之后,问题是对dataWithMaxSize:completion:的调用是异步的(意味着执行需要时间,因此在调用完成块之前进入下一行)。这就是所谓的事情:

// This runs first 
[[self.storageRef child:@"IMAGES"] dataWithMaxSize:1 * 1024 * 1024 completion:^(NSData *data, NSError *error) {
    // This runs third (well, not at all since the program crashes)
    UIImage *image = [UIImage imageWithData:data];
    [self.imagesArray addObject:image];

}];
// This runs second, and thus [self.imagesArray count] == 0
self.imageView.image = self.imagesArray.firstObject;

相反,您需要执行以下操作:

// This runs first 
[[self.storageRef child:@"IMAGES"] dataWithMaxSize:1 * 1024 * 1024 completion:^(NSData *data, NSError *error) {
    // This runs second
    UIImage *image = [UIImage imageWithData:data];
    [self.imagesArray addObject:image];
    // This runs third, and now [self.imagesArray count] == 1
    // so this doesn't crash the program
    self.imageView.image = self.imagesArray.firstObject;
}];

虽然您会注意到,如果您这样做,则不再需要阵列。