我试图将一些图像保存到相机胶卷,所有图像都在一个数组中。
if (buttonIndex == 1) {
int done = 0;
NSMutableArray *copyOfImages = [[NSMutableArray alloc]initWithArray:saveImagesToArray];
while (!done == 1){
if (copyOfImages.count == 0) {
done = 1;
}
if (copyOfImages.count > 0){
[copyOfImages removeLastObject];
}
UIImage *image = [[UIImage alloc]init];
image = [copyOfImages lastObject];
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
}
}
因为我不知道有多少图像可以使用while循环
我用8张图片测试这个,数组显示8的数量,这样很好。
当我尝试保存图像时,这会出现在控制台中。
-[NSKeyedUnarchiver initForReadingWithData:]: data is NULL
在我尝试的8张图像中,只有5张图像出现在相机胶卷中。
任何帮助都会很棒。 谢谢:))
答案 0 :(得分:1)
你为什么打电话给[copyOfImages removeLastObject]
?
每次你看看那个外观都在摧毁最后一个物体,这很奇怪,因为你尚未将它添加到卷筒中。取出那条线,看看你是否看起来有效。
此外,不是使用for循环,而是使用以下模式:
for (id object in array) {
// do something with object
}
这将枚举数组中的对象,当它到达结尾时停止。确保在执行此操作时不要修改数组。
答案 1 :(得分:1)
我遇到了同样的问题,我通过确保按顺序保存图像来解决这个问题。我认为可能会出现某种竞争状况。
基本上,我做了:
UIImageWriteToSavedPhotosAlbum([self.images objectAtIndex:self.currentIndex], self,
@selector(image:didFinishSavingWithError:contextInfo:), nil);
然后在image:didFinishSavingWithError:contextInfo:
中,我增加currentIndex
并尝试下一张图片,如果剩下的话。
到目前为止,每个案例都对我有用。
答案 2 :(得分:1)
我遇到了同样的问题。无论我添加到share activityController多少图片,最多保存了5个。
我发现问题是发送真正的UIImage而不是URL:
NSMutableArray *activityItems = [[NSMutableArray alloc] init];
for(UIImage *image in imagesArray) {
[activityItems addObject:image];
}
UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
答案 3 :(得分:0)
为了扩展Bill的答案,UIImageWriteToSavedPhotosAlbum
似乎是异步地在某个未知线程上写的 - 但是它一次可以写入的图像数量有一些隐藏的限制。如果深入挖掘,你甚至可以梳理write busy
- 类型错误。
这里有更多信息:
Objective-C: UIImageWriteToSavedPhotosAlbum() + asynchronous = problems
我也同意Bill的观点,即序列化你的写作是唯一合理/可靠的答案 我见过。