ManagedObjectContext取消回滚未完全删除插入的数据

时间:2013-03-07 17:59:35

标签: ios core-data rollback managedobjectcontext

我在类似的线程上看到了很多回复,但在遵循他们的建议之后,我仍然有一个奇怪的问题,并且正在敲打我的头。

我有一个人员表,可以让用户通过填写​​表单为其他用户添加条目。该构造函数如下所示:

-(id)initWithContext:(NSManagedObjectContext *)context {

    self = [super initWithNibName:@"FamilyMemberInfoViewController" bundle:[NSBundle mainBundle]];

    if (self) {

        self.managedObjectContext = context;

mainUser = [NSEntityDescription insertNewObjectForEntityForName:@"FamilyMember" inManagedObjectContext:context];
    Details *userDetails = [NSEntityDescription insertNewObjectForEntityForName:@"Details" inManagedObjectContext:context];
    mainUser.details = userDetails;
    userDetails.familyMember = mainUser;

...等

然后如果用户点击后退按钮,我会调用:

-(void) viewWillDisappear:(BOOL)animated {
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) {

...

           [self.managedObjectContext rollback];
           [mainUser release];
           self.managedObjectContext = nil;    

...

当它转到父表视图控制器时,它会使用下面的代码重新加载数据,并且正如预期的那样,对象消失了。

-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {

    if (viewController == self) {
        NSFetchRequest *familyMemberRequest = [NSFetchRequest new];
        NSEntityDescription *familyDescription = [NSEntityDescription entityForName:@"FamilyMember" inManagedObjectContext:self.managedObjectContext];
        familyMemberRequest.entity = familyDescription;

        NSPredicate *predicate = [NSPredicate predicateWithFormat:
                                  @"isMainUser == 0"];
        [familyMemberRequest setPredicate:predicate];

        NSError *error;
        self.familyMembers = [managedObjectContext executeFetchRequest:familyMemberRequest error:&error];

        NSLog(@"Retrieved family members! Count = %i", self.familyMembers.count);
        [familyMemberRequest release];
    }
}

但是 - 当我点击带有tableView的选项卡并返回它时,它再次运行相同的代码并在托管对象上下文中找到被取消的对象。

但是 - 当我重新运行应用程序时,它无处可寻。

如果我尝试创建另一个新人并退出,它最初会显示正确的条目数(没有任何已取消的对象),然后当我单击另一个选项卡然后再显示它时,只显示最近取消的对象除了应该存在的那些。

我已尝试在FamilyMemberInfoViewController中清除托管对象上下文的各种方式:[context reset][context rollback][context deleteObject:][context processPendingChanges]等等。尝试实验性地加载familyMembers数组两次,即使我单击后退按钮它仍然找到正确数量的对象,但当我单击一个不同的选项卡然后返回它显示额外的对象(然后继续出现,如果我去那里然后回来。)

有什么想法吗?

0 个答案:

没有答案