更新 iOS 应用程序中的核心数据记录

Update a Core Data record in iOS application

我刚刚阅读了一些教程并决定将 Core Data 存储添加到我的项目中。然后我实现 "create" 和 "read" 方法。它工作正常。 但是后来我遇到了 "update" 方法的问题。

- (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)

知道是什么导致了这样的错误吗?

不幸的是,问题出在我的注意力不集中:( 我忘记在比较值和做其他事情之前用我的 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;
    }

}