1

我在类似的主题上看到了一堆回复,但是在遵循他们的建议之后,我仍然遇到了一个奇怪的问题,并且我的头撞到了墙上。

我有一张人员表,并且可以选择让用户通过填写​​表格来为另一个用户添加条目。该构造函数如下所示:

-(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;

...ETC。

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

-(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两次尝试加载数组,即使单击后退按钮它仍然可以找到正确数量的对象,但是当我单击一个不同的选项卡,然后返回它会显示额外的对象(如果我去那里并返回,它会继续显示)。

有任何想法吗?

4

0 回答 0