2011-10-31 91 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個。 –

相關問題