簡體   English   中英

UIImage沒有保存在Documents目錄中並殺死了應用程序

[英]UIImage not being saved in Documents directory and killing the app

我從UIImagePickerController獲得了UIImage,然后像這樣保存它:

- (void) saveImageLocally:(UIImage *)image {
    NSData *imageData = UIImagePNGRepresentation(image);
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *imagePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",@"A5UserAvatar"]];

    if (![imageData writeToFile:imagePath atomically:NO])
    {
        NSLog(@"Failed to cache image data to disk");
    }
    else
    {
        NSLog(@"the cachedImagedPath is %@", imagePath);
        [[NSUserDefaults standardUserDefaults] setObject:imagePath forKey:@"AvatarKey"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }
}

而且我可以立即訪問它而不會出現以下問題:

- (UIImage *) getLocalImage {
    NSString *path = [[NSUserDefaults standardUserDefaults] stringForKey:@"AvatarKey"];
    NSLog(@"PATH FOR IMAGE IS %@", path);
    if (path != nil) {
        return [UIImage imageWithContentsOfFile:path];
    } else {
        return [UIImage imageNamed:@"default.gif"];
    }
}

上面的代碼返回保存的UIImage完全沒有問題。

關鍵是,當我終止該應用程序並再次啟動它時,找不到圖像! 我目前正在使用面向iOS 7和8的Xcode 6構建。我知道這個問題在模擬器中是不可避免的,但是我也在實時設備上遇到了這個問題。

(請參閱Xcode 6每次運行后都會在iOS8模擬器中不斷重命名我的應用程序的目錄。

我想知道自己在做錯什么,或者是否還有另一種方式將任何圖像存儲為應用程序中的文件以像頭像一樣使用。

問題是您要保存完整路徑,而不是相對於Documents文件夾的路徑。 您無法保存完整路徑,因為應用程序路徑可以更改。

您想要這樣的東西:

- (void) saveImageLocally:(UIImage *)image {
    NSData *imageData = UIImagePNGRepresentation(image);
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *filename = [NSString stringWithFormat:@"%@.png",@"A5UserAvatar"];
    NSString *imagePath = [documentsDirectory stringByAppendingPathComponent:filename];
    if (![imageData writeToFile:imagePath atomically:NO])
    {
        NSLog(@"Failed to cache image data to disk");
    }
    else
    {
        NSLog(@"the cachedImagedPath is %@", imagePath);
        [[NSUserDefaults standardUserDefaults] setObject:filename forKey:@"AvatarKey"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }
}

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

    NSString *filename = [[NSUserDefaults standardUserDefaults] stringForKey:@"AvatarKey"];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:filename];
    NSLog(@"PATH FOR IMAGE IS %@", path);
    if (path != nil) {
        return [UIImage imageWithContentsOfFile:path];
    } else {
        return [UIImage imageNamed:@"default.gif"];
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM