2011-11-17 52 views
0

我知道有一些解決方案用於在iPhone上保存和加載圖像。然而,沒有人爲我工作。iPhone使用唯一密鑰加載並保存多個UIImages?

例如,下面的鏈接有大的代碼塊,它可以讓您加載和保存一個UIImage了一個獨特的密鑰,但我不能工作了如何加載使用此代碼的圖像時告訴我們,如果根據該圖像密鑰已經存在或沒有。

http://www.friendlydeveloper.com/2010/02/using-nsfilemanager-to-save-an-image-to-or-loadremove-an-image-from-documents-directory-coding/

//saving an image 
- (void)saveImage:(UIImage*)image:(NSString*)imageName { 
    NSData *imageData = UIImagePNGRepresentation(image); //convert image into .png format. 
    NSFileManager *fileManager = [NSFileManager defaultManager];//create instance of NSFileManager 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //create an array and store result of our search for the documents directory in it 
    NSString *documentsDirectory = [paths objectAtIndex:0]; //create NSString object, that holds our exact path to the documents directory 
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", imageName]]; //add our image to the path 
    [fileManager createFileAtPath:fullPath contents:imageData attributes:nil]; //finally save the path (image) 
    NSLog(@"image saved"); 
} 

//removing an image 
- (void)removeImage:(NSString*)fileName { 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", fileName]]; 
    [fileManager removeItemAtPath: fullPath error:NULL]; 
    NSLog(@"image removed"); 
} 

//loading an image 
- (UIImage*)loadImage:(NSString*)imageName { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", imageName]]; 
    return [UIImage imageWithContentsOfFile:fullPath]; 
} 

如果你能幫助我制定出了這將是非常讚賞。我需要保存多個圖像,並根據給定鍵是否已存在來加載它們。

回答

2

如果你想獲得具有唯一鍵的圖像,請嘗試使用UUID。這與這裏獨特的key..For例子永遠作罷圖像是使用UUID的例子..

- (NSString *)pathForImageFileWithPrefix:(NSString *)Prefix 
{ 
    CFUUIDRef uuid; 
    CFStringRef uuidStr; 
    uuid = CFUUIDCreate(NULL); 
    uuidStr = CFUUIDCreateString(NULL, uuid); 
    NSData *imageData = UIImageJPEGRepresentation(chosenImage, 1.0); 
    NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString* documentsDirectory = [paths objectAtIndex:0]; 
    result = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_%@.png",Prefix, uuidStr]]; 
    [imageData writeToFile:result atomically:NO]; 
    CFRelease(uuidStr); 
    CFRelease(uuid); 
    return result; 
} 
0

如果我得到你的問題吧,你想知道與給定圖像文件名的文件是否已經存在?那麼你可以只使用

bool fileExists = [NSFileManager defaultManager] fileExistsAtPath:filePath];

+0

我已經在loadImage方法中完成了我原來的文章。所以我有你的代碼行與保存的圖像的文件路徑,然後有一個if語句,所以如果'fileExists'它將返回該保存的圖像,否則它將返回零。然而,布爾似乎總是虛假的,我總是得到零回報。有關如何調整loadImage方法以檢查圖像是否存在的任何想法? –

+0

你的文件路徑是怎樣的?你確定它是正確的,包括完整的目錄路徑,文件名和文件擴展名? – TheEye

+0

我NSLogged它並得到這個:'/ var/mobile/Applications/42C18ABE-18B2-41C5-9389-BC5C15BD8BD4/Documents/imgSaved.png'看起來不錯,不是? –