2015-06-06 44 views
0

在我的iPhone應用程序,我保留通過這個代碼與事件相關的圖片:保存的照片不更新後的設備出現

[pngData writeToFile:filePath atomically:YES]; //Write the file 

self.thisTransaction.picPath = filePath; 

後來,我檢索和顯示與此代碼的照片:

UIImage * image = [UIImage imageWithContentsOfFile:thisTransaction.picPath]; 

在我的iPad上工作得很好(我沒有iPhone)。

但是,如果更新應用程序後,通過連接iPad到我的MB Pro後,Xcode代碼修改不涉及上述行,然後斷開連接並獨立運行,預計picPath圖片不會被檢索。核心數據中與thisTransaction相關的所有其他數據完好無損,但未更改,但更新後設備上未顯示預期圖片。

有人可以告訴我我要去哪裏嗎?

編輯澄清文件路徑建設

pngData = UIImagePNGRepresentation(capturedImage.scaledImage); 

NSLog(@"1 The size of pngData should be %lu",(unsigned long)pngData.length); 

//Save the image someplace, and add the path to this transaction's picPath attribute 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory 



int timestamp = [[NSDate date] timeIntervalSince1970]; 

NSString *timeTag = [NSString stringWithFormat:@"%d",timestamp]; 

filePath = [documentsPath stringByAppendingPathComponent:timeTag]; //Add the file name 


NSLog(@"1 The picture was saved at %@",filePath); 

控制檯日誌顯示該文件路徑:

/用戶/ YoursTruly /庫/開發商/ CoreSimulator /設備/ 65FB33E1-03A7-430D-894D -0C1893E03120/data/Containers/Data/Application/EB9B9523-003E-4613-8C34-4E91B3357F5A/Documents/1433624434

+0

顯示你的代碼的價值'filePath'。最有可能的是你堅持圖片的完整路徑而不是相對路徑。切勿存儲絕對路徑,因爲該路徑可能隨時間而改變。每次只存儲相對路徑並在運行時重新計算絕對路徑。 – rmaddy

+0

請參閱上面的編輯filePath構造。 – rattletrap99

+0

您的日誌輸出似乎被截斷。應用程序之後應該有更多。但是,你想在「文件」之後堅持只是部分。然後,每次需要獲取「文檔」文件夾的路徑並追加您應該保存的部分。 – rmaddy

回答

1

您遇到的問題是應用程序沙盒的位置會隨時間而改變。通常情況下,這發生在應用程序更新時。所以你可以做的最糟糕的事情是堅持絕對的文件路徑。

你需要做的是隻保留相對於基本路徑的路徑部分(本例中爲「Documents」文件夾)。

然後,當您想再次重新加載文件時,將持久相對路徑追加到「Doc​​uments」文件夾的當前值。

所以,你的代碼需要是這樣的:

保存文件:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory 
int timestamp = [[NSDate date] timeIntervalSince1970]; 
NSString *timeTag = [NSString stringWithFormat:@"%d",timestamp]; 
filePath = [documentsPath stringByAppendingPathComponent:timeTag]; //Add the file name 
[pngData writeToFile:filePath atomically:YES]; //Write the file 

self.thisTransaction.picPath = timeTag; // not filePath 

加載文件:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory 
NSString *filePath = [documentsPath stringByAppendingPathComponent:thisTransaction.picPath]; 
UIImage *image = [UIImage imageWithContentsOfFile:filePath]; 
+0

完美,我的朋友!工作,並教我很多。非常感謝! – rattletrap99