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.");
}

次に、そのようにロードし直します(View Controllerの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");
}

このコードはシミュレーターでは毎回機能しますが、デバイスでは、イメージにロードバックされているようには見えません。私はそれが保存されることをかなり確信していますが、私はファイルシステムのビューを持っていません。

私は何か変なことをしていますか?シミュレータには、デバイスとは異なるディレクトリへのアクセス方法がありますか?

ありがとう!

4

1 に答える 1

4

あはは!ばっちり成功!

私はこれを書いているので、髪を引っ張っている他の誰かがコードを見つめてそこに座って、なぜそれが機能しないのか疑問に思っています:)

問題のある行はこれです:

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

次のようになります。

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

この理由は、これがないと、パスコンポーネントの追加によってスラッシュが処理されるため、/ Files / Documents/lastimage.pngではなく/Files/Documentslastimage.pngの行に沿って何かが得られるためです。これが将来誰かに役立つことを願っています!

于 2010-05-03T17:54:23.790 に答える