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

时间:2015-09-14 20:00:21

标签: ios objective-c core-data crud

我刚刚阅读了一些教程并决定将Core Data存储添加到我的项目中。然后我实施"创建"和"阅读"方法。它运作正常。 但后来我遇到了"更新"方法。

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

它似乎有效(它上升没有错误,并向控制台日志发送成功按摩)。但是当我读到这个对象时,似乎没有更新。 我在这个问题上阅读了很多内容,但没有弄清楚如何修复它。 有什么建议吗?

更新:我检查更新后的对象属性place的值

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

得到的结果如下:

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

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

1 个答案:

答案 0 :(得分:0)

不幸的是问题在于我的疏忽:( 我忘了在比较值之前用objectToUpdate指针分配fetched对象并做其他事情。

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

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

}