将多个图像保存到相机胶卷,仅保存了一些

时间:2011-10-31 04:19:28

标签: iphone objective-c ios

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

    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张图像出现在相机胶卷中。

任何帮助都会很棒。 谢谢:))

4 个答案:

答案 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的观点,即序列化你的写作是唯一合理/可靠的答案 我见过。