我在类似的主题上看到了一堆回复,但是在遵循他们的建议之后,我仍然遇到了一个奇怪的问题,并且我的头撞到了墙上。
我有一张人员表,并且可以选择让用户通过填写表格来为另一个用户添加条目。该构造函数如下所示:
-(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
两次尝试加载数组,即使单击后退按钮它仍然可以找到正确数量的对象,但是当我单击一个不同的选项卡,然后返回它会显示额外的对象(如果我去那里并返回,它会继续显示)。
有任何想法吗?