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];
}
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.
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
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