更新 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;
}
}
我刚刚阅读了一些教程并决定将 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;
}
}