2011-10-31 57 views
1

当我试图将一些图像保存到相机胶卷时,所有图像都在一个数组中。将多张图像保存到相机胶卷,只保存了几张

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

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

回答

1

你为什么打电话[copyOfImages removeLastObject]? 每当你经历那样的目光,你是在摧毁最后一个物体,这很奇怪,因为你还没有将它添加到卷轴上。拿出那条线,看看你看起来是否有用。

此外,不是使用一个for循环中,使用下面的图案:

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

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

+0

好吧,我所做的更改,但仍然表现出了相同的控制台输出,并且只有5张图片显示了,所以我决定增加'睡眠(1);'在我将图像写入相机胶卷之后,它完全正常工作。你的循环虽然可能效果更好。谢谢! :D – Jacob

1

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

基本上,我所做的:

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

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

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

0

为了扩大Bill的答案,UIImageWriteToSavedPhotosAlbum似乎是在异步地写一些未知的线程 - 但是它也可以一次写入一些图像的隐藏限制。如果深入挖掘,你甚至可以挑出write busy类型的错误。

吨以上的信息在这里:

Objective-C: UIImageWriteToSavedPhotosAlbum() + asynchronous = problems

我也同意比尔是你的序列化写入是唯一合理的/可靠的答案 我都看到了。

1

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

我发现这个问题是送真正的UIImage,而不是网址:

NSMutableArray *activityItems = [[NSMutableArray alloc] init]; 

for(UIImage *image in imagesArray) { 
    [activityItems addObject:image]; 
} 

UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; 
+0

相同。最多保存5个。 –

相关问题