Как правильно сохранить и прочитать изображение? - PullRequest
0 голосов
/ 19 декабря 2018

Как правильно сохранить и прочитать изображение?После каждого обновления версии приложения программа хочет снова сохранять новое изображение.

сохранение изображения:

+(void)setImage:(UIImage*)image {

NSData *imageData = UIImageJPEGRepresentation(image, 1);

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
NSString *imagePath = [documentsPath stringByAppendingPathComponent:@"image.jpg"];

BOOL writtenToFile = [imageData writeToFile:imagePath atomically:YES];

[[NSUserDefaults standardUserDefaults] setObject:imagePath forKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];
}

чтение изображения:

+(UIImage*)getImage {
NSString *imagePath = [[NSUserDefaults standardUserDefaults] objectForKey:key];
if (imagePath) {
    return [UIImage imageWithData:[NSData dataWithContentsOfFile:imagePath]];
}

return nil;
}

Установить объект вUserDefaults всегда пуст.

1 Ответ

0 голосов
/ 19 декабря 2018

Не сохраняйте полный путь к изображению в настройках пользователя по умолчанию, поскольку он содержит GUID контейнера.GUID контейнера изменяется после обновления.

- (void)setImage:(UIImage *)image {
    NSData *imageData = UIImageJPEGRepresentation(image, 1);

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = [paths objectAtIndex:0];
    NSString *imagePath = [documentsPath stringByAppendingPathComponent:@"image.jpg"];

    BOOL writtenToFile = [imageData writeToFile:imagePath atomically:YES];

    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:key];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

+ (UIImage *)getImage {
    BOOL imageExists  = [[NSUserDefaults standardUserDefaults] boolForKey:key];
    if (imageExists) {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsPath = [paths objectAtIndex:0];
        NSString *imagePath = [documentsPath stringByAppendingPathComponent:@"image.jpg"];

        return [UIImage imageWithData:[NSData dataWithContentsOfFile:imagePath]];
    }

    return nil;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...