CoreData: przechowuj obrazy do DB czy nie?

Robię aplikację, która robi zdjęcia ze strony internetowej dla jakiejś nazwy użytkownika i pokazuje go w UITable z nazwą użytkownika, a następnie po kliknięciu nazwa użytkownika pokazuje zdjęcia dla tego użytkownika, a następnie kliknięcie na nazwę zdjęcia pokazuje zdjęcie pełnoekranowe.

Moje pytanie brzmi: używam NSData do pobierania zdjęć z Internetu. Czy muszę zapisywać dane w CoreData? Po naciśnięciu nazwa użytkownika tworzy NSData i pobiera zdjęcia z Internetu i pokazuje je na UITable. A to wymaga czasu.

Co to jest dobre podejście? i jak zapisać te obrazy do CoreData?

Używam tej metody

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

I tu definicja metody 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];
}
Author: Mark, 2010-04-04

2 answers

Po pierwsze, zawsze przechowuj swoje obrazy w użytecznym formacie, takim jak PNG lub JPEG zamiast NSData. To zaoszczędzi ci wielu bólów głowy.

Po drugie, reguła przechowywania danych binarnych jest następująca:

  • 1MB przechowywać na dysku i odwoływać się do niego wewnątrz danych rdzenia

Update

The przechowywanie danych wewnątrz rdzenia powinno być binarne i można dla nich pisać metody accessora. Spójrz na tę odpowiedź: podstawowe obrazy danych z pulpitu na iphone

Update

Przykładowy kod, do którego podlinkowałem, opisuje jak utworzyć Accesory w podklasie NSManagedObject, które będą konwertować obraz w przód iw tył pomiędzy interfejsem i danymi binarnymi.

 53
Author: Marcus S. Zarra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:08

Możesz po prostu przechowywać UIImage obiekty bezpośrednio w CoreData, po prostu użyj typu danych Transformable i jesteś gotowy do pracy

 1
Author: Khaled Khaldi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-08 19:55:26