1

我使用NSData在我的應用程序中保留圖像。我省像這樣的圖像(在我的應用程序代表):保存數據 - 在模擬器上工作,而不是在設備上工作

- (void)applicationWillTerminate:(UIApplication *)application 
{ 
    NSLog(@"Saving data"); 

    NSData *data = UIImagePNGRepresentation([[viewController.myViewController myImage]image]); 
    //Write the file out! 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    NSString *path_to_file = [documentsDirectory stringByAppendingString:@"lastimage.png"]; 

    [data writeToFile:path_to_file atomically:YES]; 
    NSLog(@"Data saved."); 
} 

,然後我加載它回來像這樣(在我的視圖控制器,viewDidLoad下):

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

NSString *path_to_file = [documentsDirectory stringByAppendingString:@"lastimage.png"]; 

if([[NSFileManager defaultManager] fileExistsAtPath:path_to_file]) 
{ 
    NSLog(@"Found saved file, loading in image"); 
    NSData *data = [NSData dataWithContentsOfFile:path_to_file]; 

    UIImage *temp = [[UIImage alloc] initWithData:data]; 
    myViewController.myImage.image = temp; 
    NSLog(@"Finished loading in image"); 
} 

此代碼屢試不爽在模擬器上,但在設備上,似乎永遠不會重新加載圖像。我很確定它可以保存,但我沒有查看文件系統。

我在做些奇怪的事情嗎?模擬器有不同的方式來訪問它的目錄比設備?

謝謝!

+0

這是否與權利管理有關? – DMan 2010-04-21 04:37:52

+0

什麼樣的權利管理?模擬器與某種權限相關的方式不同於設備嗎?感謝您的答覆! – 2010-04-21 22:23:58

+0

嗯,我不是一個iPhone開發者,但我聽說iPhone非常嚴格......並且你的產品線'很確定它可以省下來' - 是嗎?我看你有一個NSLog,但如果沒有,它應該返回一個錯誤。 – DMan 2010-04-21 22:42:51

回答

4

啊哈!搞定了!

我在寫這使別人拉自己的頭髮不坐那裏盯着代碼,不知道爲什麼它不工作:)

有問題的線,這是一個:

NSString *path_to_file = [documentsDirectory stringByAppendingString:@"lastimage.png"]; 

它應該是這樣的:

NSString *path_to_file = [documentsDirectory stringByAppendingPathComponent:@"lastimage.png"]; 

這樣做的原因是,如果沒有它,你會相處/Files/Documentslastimage.png代替/文件/文件/ lastima東西線ge.png,因爲追加的路徑組件會照顧你的斜槓。我希望這能幫助未來的其他人!

相關問題