2010-11-08 92 views
1

大家好我想要保存圖像在我目前在我的視圖,但問題是,我只能保存一個圖像,如果我想保存另一個圖像,它取代了舊的捆綁我沒有得到然後如何保存包中的多個圖像。 這是我的代碼。如何在iphone應用程序中保存多個文件包?

- (void)writeImageToDocuments:(UIImage*)image 
{ 
    NSData *png = UIImagePNGRepresentation(image); 
    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSError *error = nil; 
    [png writeToFile:[documentsDirectory stringByAppendingPathComponent:@"image.png"] options:NSAtomicWrite error:&error]; 


} 

請幫助我,如何

由於保存多張圖片,文件等捆綁提前

+0

粗體和斜體確實無助於格式化代碼。使用代碼格式代替(粘貼代碼,標記它,點擊'101010'按鈕) – vikingosegundo 2010-11-08 12:06:10

+0

感謝您清理代碼;我沒有注意到writeToFile的雙重調用:options:error:before。我已經在下面調整了我的答案 - 希望它有幫助。 – Tommy 2010-11-08 12:52:43

+0

非常感謝兄弟我也在尋找如何做到這一點,現在你讓我知道我需要按'101010',我會嘗試。 – Sabby 2010-11-08 13:19:35

回答

5

你不保存成束,你保存到您的應用程序的文檔目錄。它沒有捆綁方面。

您正在使用文件名@「image.png」作爲您保存的每個文件。因此,每一個新的寫都會覆蓋舊的。實際上,你將每個文件寫兩次。要保存多個文件,請使用不同的文件名。

傳遞一個數值常量作爲NSData writeToFile的「options:」參數也是錯誤的形式writeToFile:options:error :(或者的確,任何類似的情況)。值'3'包含一個未定義的標誌,所以您應該期待未定義的行爲,並且Apple可以合法拒絕批准您的應用程序。可能你想保留NSAtomicWrite行,然後殺掉它。

如果你只是希望找到第一個未使用image.png文件名,簡單的解決辦法是這樣的:

int imageNumber = 0; 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSString *pathToFile; 

do 
{ 
    // increment the image we're considering 
    imageNumber++; 

    // get the new path to the file 
    pathToFile = [documentsDirectory stringByAppendingPathComponent: 
              [NSString stringWithFormat: 
                @"image%d.png", imageNumber]]; 
} 
while([fileManager fileExistsAtPath:pathToFile]); 
/* so, we loop for as long as we keep coming up with names that already exist */ 

[png writeToFile:pathToFile options:NSAtomicWrite error:&error]; 

還有一個潛在的下行到;所有你嘗試的文件名都在autorelease池中。所以他們至少會一直留在記憶中,直到這個特定的方法退出。如果最終嘗試成千上萬的話,那可能會成爲一個問題 - 但它與答案沒有直接關係。

假設你總是添加新文件,但從不刪除文件,那麼這個問題是你可以用二分查找更好地解決的問題。

搜索的文件名將是image1.png,image2.png等。