CoreData и изображение по URL

В моем приложении я получаю некоторые данные Json от веб-сервисов.

Я сопоставил эту дату в своей модели Core Data.

В некоторых объектах у меня есть поле, представляющее URL-адрес изображения, которое я должен показать. Как лучше справиться с этой ситуацией?

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

В противном случае я могу реализовать настоящий кеш, чтобы получить уже загруженные изображения: es: getImageByURL (сохранить уже загруженные изображения в каталоге)

Есть ли в CoreData конкретные решения для такой ситуации?


person Safari    schedule 09.09.2014    source источник


Ответы (2)


Это действительно ваше решение по дизайну приложения. В любом случае, если вы хотите поместить все изображение в базовую таблицу, вы можете использовать формат «BinaryData» (BLOB). Есть разные способы,

Для приложения, которое всегда в сети 1. Сохраните URL-адрес ваших основных данных и извлеките их из URL-адреса.

Для офлайн-поддержки. 1. Сохраните изображение как большой двоичный объект. 2. Сохраните в папке документов и добавьте ссылку на файл в основные данные. 3. Используйте стороннюю библиотеку с поддержкой веб-кэша и сохраните URL-адрес. Когда вы снова извлечете URL-адрес, веб-кеш вернет изображение, которое кешируется. Это может быть предпочтительнее двух других, если содержимое должно циклически повторяться некоторое время и требуется автономный режим.

person Naveen Prasad R    schedule 09.09.2014
comment
Хранение такого типа данных в папке «Документы» нарушит Руководство по хранению данных iOS и может привести к отклонению приложения во время проверки. Система загрузки URL-адресов также уже кэширует данные для вас, добавление еще одного уровня кэширования не требуется. - person quellish; 21.09.2014

Два случая, которые мы должны обработать - онлайн и офлайн

<сильный>1. онлайн:

EGOImageView *egoImgView = [[EGOImageView alloc] initWithFrame:CGRectMake(0, 0, 290, 118)]; жалобаImgView.imageURLString = [NSString stringWithFormat:@"%@", imageURLString];

<сильный>2. оффлайн:

  • Если ваше приложение поддерживает как онлайн, так и офлайн, просто сохраните имя изображения в coredata, загрузите и сохраните изображение в пути к документам.
  • ниже приведен код для сохранения изображения в пути документов с именем, сохраненным в основных данных.

#define DOCUMENTS_PATH [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent: @"Download"]

Чтобы сохранить изображение в пути к документам

- (void)saveImageSynchronouslyInDocumentsWithUrl:(NSString *)serverImageURL withName:(NSString` `*)coredataImageName`
    {
 NSLog(@"Synchronous Image urls %@",serverImageURL);

NSURL *url = [NSURL URLWithString: imageUrl];

NSString *imagePath = [DOCUMENTS_PATH stringByAppendingPathComponent:imageName];

NSError *error = nil;

NSData *imageData = [NSData dataWithContentsOfURL:url options:NSDataReadingUncached error: &error];
if (!error) {
    [imageData writeToFile:imagePath atomically:YES];

}
}

Чтобы получить изображение из пути к документам

UIImage *image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@",DOCUMENTS_PATH, coredataImageName]];
person Anjaneyulu Battula    schedule 20.09.2014