2015-09-14 4 views
1

Я только что прочитал несколько руководств и решил добавить хранилище Core Data в свой проект. Затем я реализую методы «create» и «read». Он работает нормально. Но тогда у меня возникла проблема с методом «обновления».Обновление записи основных данных в приложении iOS

- (void)updateForecastPlace:(NSString *)placeString 
{ 
    NSManagedObjectContext *context = [self managedObjectContext]; 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:ENTITY_NAME inManagedObjectContext:context]; 
    [fetchRequest setEntity:entity]; 
    NSError *error = nil; 
    NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error]; 
    WFForecast *forecastToUpdate; 

    for (WFForecast *forecast in fetchedObjects) 
    { 

     if ([[forecastToUpdate timestamp] compare:[forecast timestamp]] == NSOrderedAscending) 
     { 
      forecastToUpdate = forecast; 
     } 

    } 

    [forecastToUpdate setPlace:placeString]; 
    error = nil; 

    if ([context save:&error]) 
    { 
     NSLog(@"Forecast information was updated!"); 
    } 
    else 
    { 
     NSLog(@"The forecast information was not updated: %@", [error userInfo]); 
    } 

} 

Я извлекаю объекты из контекста. (Все нормально)

Затем выберите один для обновления.

установки новое значение его свойству ([forecastToUpdate setPlace:placeString];)

Затем сохраните контекст. ([context save:&error]))

Кажется, что он работает (это не вызывает ошибок и посылает успешный массаж в консольный журнал). Но когда я читаю этот объект, он не обновляется. Я прочитал много материала по этой проблеме, но не понял, как это исправить. Любые предложения, пожалуйста?

UPDATE: проверить значение моего обновленного свойства объекта place

[forecastToUpdate setPlace:placeString]; 
NSLog(@"---arg value %@", placeString); 
NSLog(@"---updated value %@", [forecastToUpdate place]); 

и получил выход как:

---arg value Sydney, Australia 
---updated value (null) 

Любая идея, что вызвало такую ​​ошибку?

+1

ваш код кажется нормально, убедитесь, что вы читаете правильный объект также проверьте, правильно ли вы указали значение «forecastToUpdate.place» перед сохранением контекста. – Idali

+0

Idali, спасибо. Ваш комментарий немного подтолкнул меня в моем решении (проверьте обновление) – sonysun

ответ

0

К сожалению, проблема была в моей невнимательности :( Я забыл назначить сгружен объект с моим objectToUpdate указателя, прежде чем значения сравнения и делать другие вещи.

WFForecast *lastestForecast = fetchedObjects[0]; // <- missed this row 

for (WFForecast *forecast in fetchedObjects) 
{ 
    NSLog(@"%@", [forecast place]); 
    if ([[lastestForecast timestamp] compare:[forecast timestamp]] == NSOrderedAscending) 
    { 
     lastestForecast = forecast; 
    } 

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