Правильный способ сохранения и загрузки фотографий - PullRequest
9 голосов
/ 01 марта 2011

Я делаю небольшое приложение, в котором пользователь может создать игровой профиль, ввести некоторые данные и сделать снимок с помощью камеры.

Я сохраняю большинство этих данных профиля с помощью NSUserDefaults, но друг отговорил меня сохранить изображение профиля в NSUserDefault.

Каков правильный способ сохранения и извлечения изображений локально в моем приложении?

Ответы [ 3 ]

18 голосов
/ 01 марта 2011

Вы должны сохранить его в папке Documents или Cache.Вот как это сделать.

Сохранение в папку Documents:

NSString* path = [NSHomeDirectory() stringByAppendingString:@"/Documents/myImage.png"];

BOOL ok = [[NSFileManager defaultManager] createFileAtPath:path 
          contents:nil attributes:nil];

if (!ok) 
{
    NSLog(@"Error creating file %@", path);
} 
else 
{
    NSFileHandle* myFileHandle = [NSFileHandle fileHandleForWritingAtPath:path];
   [myFileHandle writeData:UIImagePNGRepresentation(yourImage)];
   [myFileHandle closeFile];
}

Загрузка из папки Documents:

NSFileHandle* myFileHandle = [NSFileHandle fileHandleForReadingAtPath:path];
UIImage* loadedImage = [UIImage imageWithData:[myFileHandle readDataToEndOfFile]];

Вы также можете использовать UIImageJPEGRepresentation, чтобы сохранить UIImage как JPEG файл.Более того, если вы хотите сохранить его в каталоге Cache, используйте:

[NSHomeDirectory() stringByAppendingString:@"/Library/Caches/"]
6 голосов
/ 01 марта 2011

Один из способов сделать это - использовать каталог документов приложения.Это относится к конкретному приложению и не будет видимо другим приложениям.
Как создать это:
Просто добавьте статическую функцию в App Delegate и используйте эту функцию там, где всегда требуется путь.* Надеюсь, это помогло ..

1 голос
/ 01 марта 2011

Я думаю это ("iphone-user-defaults-and-uiimages") сообщение решает вашу проблему. Не сохраняйте BLOB-объекты в списке свойств, таких как NSUserDefaults. В вашем случае я бы вместо этого записал прямо на диск.

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