Подтвердить что ты не робот

CoreData: хранить изображения в DB или нет?

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

Мой вопрос: я использую NSData для получения фотографий из Интернета. Нужно ли сохранять данные в CoreData? При нажатии имени пользователя он создает NSData и загружает фотографии из Интернета и показывает их на UITable. И это требует времени.

Что такое хороший подход? и как сохранить эти изображения в CoreData?

Я использую этот метод

NSData *imageData=[flickr dataForPhotoID:firstPhoto.id fromFarm:firstPhoto.farm 
onServer:firstPhoto.server withSecret:firstPhoto.secret inFormat: 
FlickrFetcherPhotoFormatSquare];

и здесь определение метода dataForPhotoID

- (NSData *)dataForPhotoID:(NSString *)photoID fromFarm:(NSString *)farm   
   onServer:(NSString *)server withSecret:(NSString *)secret 
 inFormat:(FlickrFetcherPhotoFormat)format {

#if TEST_HIGH_NETWORK_LATENCY
sleep(1);
#endif

NSString *formatString;

switch (format) {
    case FlickrFetcherPhotoFormatSquare:    formatString = @"s"; break;
    case FlickrFetcherPhotoFormatLarge:     formatString = @"b"; break;
}

NSString *photoURLString = [NSString stringWithFormat:@"http://farm%@.static.flickr.com/%@/%@_%@_%@.jpg", farm, server, photoID, secret, formatString];
NSURL *url = [NSURL URLWithString:photoURLString];

return [NSData dataWithContentsOfURL:url];
}
4b9b3361

Ответ 1

Во-первых, всегда сохраняйте свои изображения в удобном для использования формате, таком как PNG или JPEG вместо NSData. Это избавит вас от многих головных болей.

Во-вторых, правило для хранения двоичных данных:

  • < 100kb хранить в той же таблице, что и соответствующие данные
  • < 1mb хранить в отдельной таблице, прикрепленной через связь, чтобы избежать ненужной загрузки.
  • 1mb хранить на диске и ссылаться на него внутри Core Data​​p >

Update

Хранение внутри Core Data должно быть двоичным, и вы можете написать для него методы доступа. Взгляните на этот ответ: Основные изображения данных с рабочего стола на iphone

Update

В приведенном ниже примере кода описывается, как создавать аксессоры в подклассе NSManagedObject, который будет преобразовывать изображение взад и вперед между данными UIImage и двоичными данными.

Ответ 2

Вы можете просто сохранить объекты UIImage в CoreData напрямую, просто используйте тип данных Transformable, и вы готовы к работе