将多张图像保存到相机胶卷中,只保存了几张

我试图将一些图像保存到相机胶卷,所有的图像都在一个数组中。

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); } } 

因为我不知道有多less图像可以使用一个while循环

我进行了8个图像的testing,数组显示8的数量,所以这很好。

当我尝试保存图像时出现在控制台中。

 -[NSKeyedUnarchiver initForReadingWithData:]: data is NULL 

在试图的8张图像中,只有5张出现在相机胶卷中。

任何帮助将是伟大的。 谢谢 :)

你为什么要调用[copyOfImages removeLastObject] ? 每当你经历那样的目光,你是在摧毁最后一个东西,因为你还没有把东西添加到这个东西上,这很奇怪。 拿出这条线,看看你看起来是否工作。

此外,而不是使用for循环,使用以下模式:

 for (id object in array) { // do something with object } 

这将枚举数组中的对象,当它到达结尾时停止。 只要确保在进行此操作时不要修改arrays。

我有这个相同的问题,我通过确保图像顺序保存来解决它。 我认为可能会出现某种竞赛状况。

基本上,我做了:

  UIImageWriteToSavedPhotosAlbum([self.images objectAtIndex:self.currentIndex], self, @selector(image:didFinishSavingWithError:contextInfo:), nil); 

然后在image:didFinishSavingWithError:contextInfo:我增加currentIndex并尝试下一个图像,如果有任何离开。

到目前为止,这在所有情况下都适用于我。

我有同样的确切问题。 无论我添加到共享activityController多less图片,最多可以保存5个。

我发现问题是发送真正的UIImage而不是URL:

 NSMutableArray *activityItems = [[NSMutableArray alloc] init]; for(UIImage *image in imagesArray) { [activityItems addObject:image]; } UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; 

为了扩大比尔的答案, UIImageWriteToSavedPhotosAlbum似乎是在一些未知的线程上进行asynchronous写入 – 但是它也可以一次写入一些图像的隐藏限制。 如果深入挖掘,你甚至可以挑出write busy型的错误。

在这里更多的信息:

Objective-C:UIImageWriteToSavedPhotosAlbum()+asynchronous=问题

我也同意比尔的说法,序列化你的写作是我见过的唯一合理/可靠的答案。