У меня есть основной объект данных, который содержит такие поля, как имя (уникальное), imageURL и изображение (сохранение изображения как данных). Я загружаю эти данные из веб-API, которые я не контролирую (данные в JSON).
Я должен каждую неделю проверять, были ли изменения на стороне API, и обновлять мою локальную базу данных. Иногда его свойство imageURL меняется, и я должен это обнаружить, загрузить новое изображение и удалить старый. Любая идея, как это реализовать (я был бы рад за кусок кода).
1 ответ
Я бы подумал, что это довольно просто.
Вы можете загрузить изображения, когда впервые получите товар.
Так что теперь проверьте что-нибудь вроде ...
Если currentImageURL отличается от newImageURL, загрузите изображение.
ИЗМЕНИТЬ - чтобы объяснить, как это должно работать
Предположим, вы обработали JSON и теперь у вас есть NSArray
из NSDictionaries
...
Вы бы сделали что-то вроде этого ...
//I'm assuming the object is called "Person"
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
for (NSDictionary *personDictionary in downloadedArray) {
// You need to find if there is already a person with that name
NSPredicate *namePredicate = [NSPredicate predicateWithFormat:@"name = %@", personDictionary[@"name"]];
[request setPredicate:namePredicate];
// use whichever NSManagedObjectContext is correct for your app
NSArray *results = [self.moc executeFetchRequest:request error:&error];
Person *person;
if (results.count == 1) {
// person already exists so get it.
person = results[0];
} else {
// person doesn't exist, create it and set the name.
person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.moc];
person.name = personDictionary[@"name"];
}
// check the image URL has changed. If it has then set the new URL and make the image nil.
if (![personDictionary[@"imageURL"] isEqualToString:person.imageURL]
|| !person.imageURL) {
person.imageURL = personDictionary[@"imageURL"];
person.image = nil;
}
// now download the image if necessary.
// I would suggest leaving this here and then wait for the image to be accessed
// by the UI. If the image is then nil you can start the download of it.
// now save the context.
}
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.