我有一个使用UItableview
和一个UIViewController
的应用程序。 UIViewController
用于添加/修改/查看
我可以添加和查看然后切换到编辑。 The problem I am having is persisting the data in core data following an update.
在编辑/更新之后,更改在表视图中可见,但在应用程序重新启动时(或从那时返回到表视图),更改已消失。
tableview类在NSManagedObject
中设置prepareForSegue
,如下所示:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UIButton *)sender
{
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
NSManagedObject *selectedEntry = [fetchResultsArray objectAtIndex:indexPath.row];
DSAdd *wadd = [segue destinationViewController];
if ([segue.identifier isEqualToString: @"detailsSegue"])
{
wadd.callType = 2; //view details
wadd.selectedEntry = selectedEntry;
}
else
{
wadd.callType = 0; //add
}
}
在视图控制器的标题中,我声明:
@property (strong) NSManagedObject *selectedEntry;
在视图控制器的类中,我有以下Save方法:
- (void) saveData
{
DBUtils *dbu = [[DBUtils alloc] init];
NSManagedObjectContext *context = [dbu managedObjectContext];
if (isEditMode) //<-- THIS PART DOES NOT WORK
{
NSLog(@"%@",[_selectedEntry valueForKey:@"name"]); //prints old value
[_selectedEntry setValue:_nameTF.text forKey:@"name"];
NSLog(@"%@",[_selectedEntry valueForKey:@"name"]); //prints new value
}
else // <-- THIS PART WORKS
{
NSManagedObject *newItem;
newItem = [NSEntityDescription insertNewObjectForEntityForName:@"Entry" inManagedObjectContext:context];
[newItem setValue:[NSNumber numberWithInt:1] forKey:@"catId"];
[newItem setValue:_nameTF.text forKey:@"name"];
} //else
NSError *error;
if (![context save:&error]) {
NSLog(@"Failed to save - error: %@", [error localizedDescription]);
}
[self.navigationController popViewControllerAnimated:YES];
}
感谢您的帮助!
答案 0 :(得分:1)
首先,您需要确保您使用的NSManagedObject属于您尝试保存的上下文。
然后,您需要检查此上下文的配置方式。如果它配置了持久性存储协调器,则save将提交到存储。如果配置了父上下文,则save会将更改推送到父级而不是保存到存储。在这种情况下,您需要保存父级,如果它配置了另一个父级,则保存该父级。当最后一个父节点(使用持久性存储协调器配置的节点)被保存时,更改将转到存储。
答案 1 :(得分:0)
我认为您的上下文可能存在问题,请尝试多线程