Локальное хранение изображений на устройстве iOS
некоторые связанные с iOS фото приложения хранят изображения, созданные с помощью приложения где-то, кроме библиотеки фотографий. Например, Fat Booth показывает список прокрутки фотографий, созданных с помощью приложения при запуске приложения. Обратите внимание, эти фотографии сохраняются Вт/вывода пользователь явно сохраняя их в библиотеке фотографий. каков самый простой способ сохранения и сохранения изображений в приложении iOS?
единственный стойких магазинах я знакома с NSUserDefaults и брелок. Однако я никогда не слышал о них, используемых для хранения больших фрагментов данных, таких как изображение. Теперь мне интересно, является ли Core Data самым простым способом.
3 ответов
самый простой способ-сохранить его в каталоге документов приложения и сохранить путь с помощью NSUserDefaults следующим образом:
NSData *imageData = UIImagePNGRepresentation(newImage);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *imagePath =[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",@"cached"]];
NSLog(@"pre writing to file");
if (![imageData writeToFile:imagePath atomically:NO])
{
NSLog(@"Failed to cache image data to disk");
}
else
{
NSLog(@"the cachedImagedPath is %@",imagePath);
}
затем сохраните imagePath в некотором словаре в NSUserDefaults или как вам угодно, а затем, чтобы получить его, просто сделайте:
NSString *theImagePath = [yourDictionary objectForKey:@"cachedImagePath"];
UIImage *customImage = [UIImage imageWithContentsOfFile:theImagePath];
Для Swift:
let imageData = UIImagePNGRepresentation(selectedImage)
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let imagePath = paths.stringByAppendingPathComponent("cached.png")
if !imageData.writeToFile(imagePath, atomically: false)
{
println("not saved")
} else {
println("saved")
NSUserDefaults.standardUserDefaults().setObject(imagePath, forKey: "imagePath")
}
Для Swift 2.1:
let imageData = UIImagePNGRepresentation(selectedImage)
let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
let imageURL = documentsURL.URLByAppendingPathComponent("cached.png")
if !imageData.writeToURL(imageURL, atomically: false)
{
print("not saved")
} else {
print("saved")
NSUserDefaults.standardUserDefaults().setObject(imageData, forKey: "imagePath")
}
stringByAppendingPathComponent
недоступен в Swift 2.1, поэтому вы можете использовать URLByAppendingPathComponent.
Получить больше информации здесь.
вы can сделайте это с основными данными, сохраняя двоичные данные,но его не рекомендуется. Есть гораздо лучший способ - особенно для фотографий. Ваше приложение имеет каталог документов / файлов, доступ к которому может получить только ваше приложение. Я рекомендую начать здесь для концепций и как получить к нему доступ. Его относительно просто. Вы можете объединить это с основными данными для хранения путей к файлам, метаданных и т. д. http://developer.apple.com/library/mac/#documentation/FileManagement/Conceptual/FileSystemProgrammingGUide/FileSystemOverview/FileSystemOverview.html