2013-09-19 4 views
0

У меня есть объект данных ядра, который содержит такие поля, как имя (уникальный), imageURL и изображение (сохранение изображения в виде данных). Я загружаю эти данные из веб-API, с которыми я не контролирую (данные в JSON).Обновление основных данных или создать поиск обновлено

Я должен проверять каждую неделю, если были внесены изменения на стороне API и обновлена ​​моя локальная база данных. Иногда его изменение свойства imageURL, и я должен обнаружить это и загрузить новое изображение и удалить старый. Любая идея, как реализовать это (я был бы рад за кусок кода).

ответ

1

Я бы подумал, что это довольно прямолинейно.

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

Так что теперь есть проверочное что-то вроде ...

если currentImageURL отличается от newImageURL загрузки изображения.

EDIT - Для того, чтобы объяснить, как он должен работать

Предполагая, что вы обработали 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. 
} 
+0

Поэтому я должен загружать данные в какие-то временные объекты, затем перебирать их и сравнивать с объектами из fetchResult. Если такой же объект существует, проверьте, имеет ли он другой imageUrl, а если нет, просто добавьте его в MOC? Это не похоже на элегантное решение, не самое быстрое ... –

+0

Ну, вы говорите, что атрибут name уникален. Как вы убедитесь, что это уникально? – Fogmeister

+0

Я знаю, что имя уникально. Вот как я это делаю прямо сейчас. –

Смежные вопросы