我在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:]:对象不能为零'
答案 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;
}];
虽然您会注意到,如果您这样做,则不再需要阵列。