我刚刚阅读了一些教程并决定将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)
知道是什么导致了这样的错误吗?
答案 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;
}
}