我正在实施iPhone应用程序的汽车管理器,并且无法保存新车。所以我有一个“Car”实体(和每个加载的DB),包含多个属性。我有2个布尔值“保存”和“选择”来跟踪用户添加到他的列表(如果添加,保存= 1)以及当前选择哪辆车的车辆。因此,当我创建一辆新车时,我取消选择旧车(选择= 0),并且想要修改新车以设置其属性saved = 1和selected = 1。iOS CoreData更新实体对象
这里是我的功能:
- (IBAction)save
{
// Disable the previous car selection.
[self deselectCurrentSelectedCar];
// Add new car as saved and selected.
[self saveAndSelectNewCar];
// Call the delegate to dismiss the modal view.
[_delegate dismissAndSave];
}
- (void)deselectCurrentSelectedCar
{
// Fetched saved car.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Car" inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:entity];
// Set predicate and sort orderings...
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"selected = 1"];
[fetchRequest setPredicate:predicate];
// Execute the fetch -- create a mutable copy of the result.
NSError *error = nil;
NSMutableArray *mutableFetchResults = [[self.managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy];
if (mutableFetchResults == nil) {
// Handle the error.
NSLog(@"[AddCarViewController] deselect car: car not found.");
}
else {
// Get car and assign new selected value.
Car *carToSave = (Car *)[mutableFetchResults objectAtIndex:0];
[carToSave setSelected:[NSNumber numberWithInt:0]];
// Save the car.
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
// Handle the error.
NSLog(@"[AddCarViewController] deselect car: error saving car.");
}
else {
NSLog(@"[AddCarViewController] deselect car: car saved.");
}
}
// Memory management.
[fetchRequest release];
[mutableFetchResults release];
}
- (void)saveAndSelectNewCar
{
// Get the car, and pass to the delegate the new settings.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Car" inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:entity];
// Set predicate and sort orderings...
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(year=%@) AND (make=%@) AND (model=%@) AND (d=%@) AND (n=%@)", _car.year, _car.make, _car.model, _car.d, _car.n];
[fetchRequest setPredicate:predicate];
// Execute the fetch -- create a mutable copy of the result.
NSError *error = nil;
NSMutableArray *mutableFetchResults = [[self.managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy];
if (mutableFetchResults == nil) {
// Handle error.
NSLog(@"[AddCarViewController] save and select: can't save the new car");
}
else {
// Get the car selected.
Car *selectedCar = (Car *)[mutableFetchResults objectAtIndex:0];
[selectedCar setValue:[NSNumber numberWithInt:1] forKey:@"selected"];
[selectedCar setValue:[NSNumber numberWithInt:1] forKey:@"saved"];
// Save the car.
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
// Handle the error.
NSLog(@"[AddCarViewController] save and select: error saving car.");
}
else {
NSLog(@"[AddCarViewController] save and select: car saved.");
}
// Add car to delegate.
[EcoAppAppDelegate setUserCar:selectedCar];
}
// Memory management.
[fetchRequest release];
[mutableFetchResults release];
}
而且我有这个记录所有的时间:“保存错误车”在两个功能上。所以肯定有一些错误。
此外,它是相当恼人的取车我想修改它,而不是立即做一个更新。如果有另一个请告诉我!
谢谢。
什么是错误?也许这会有所帮助? – 2011-05-27 21:05:52
SQL执行期间出错:约束失败 – Dachmt 2011-05-27 21:09:40
您需要提供更多信息。你有两个NSLog语句可以打印“错误节能汽车”。你从哪一个错误中得到了错误?当发生这种情况时,NSError参数对此有何评论? Core Data可以告诉你哪里出了问题,所以这是你应该关注的第一件事。 – 2011-05-27 21:12:00