Iphone 尝试从prepareForSegue设置ManagedObjectContext属性时出现错误\u访问错误

Iphone 尝试从prepareForSegue设置ManagedObjectContext属性时出现错误\u访问错误,iphone,ios,xcode,Iphone,Ios,Xcode,我正在使用CoreData,并尝试将ManagedObjectContext对象从一个视图控制器传递到另一个视图控制器 以下是我的第一个视图控制器代码: - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"showDetail"]) { NSIndexPath *indexPath =

我正在使用CoreData,并尝试将ManagedObjectContext对象从一个视图控制器传递到另一个视图控制器

以下是我的第一个视图控制器代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{   
    if ([[segue identifier] isEqualToString:@"showDetail"])
    {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];

        self.managedObjectContext = [self.fetchedResultsController managedObjectContext];

        [[segue destinationViewController] setManagedObjectContext:self.managedObjectContext];
    }
}
-(void)setManagedObjectContext:(NSManagedObjectContext *)managedObjContext
{
    self.managedObjectContext = managedObjContext;
    //NSManagedObjectContext *context = managedObjContext;
}
prepareForSegue调用我在第二个视图控制器上创建的名为setManagedObjectContext的方法:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{   
    if ([[segue identifier] isEqualToString:@"showDetail"])
    {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];

        self.managedObjectContext = [self.fetchedResultsController managedObjectContext];

        [[segue destinationViewController] setManagedObjectContext:self.managedObjectContext];
    }
}
-(void)setManagedObjectContext:(NSManagedObjectContext *)managedObjContext
{
    self.managedObjectContext = managedObjContext;
    //NSManagedObjectContext *context = managedObjContext;
}
当此代码命中Xcode时,会锁定并最终抛出一个坏的\u访问内存错误。当我调试这段代码时,managedObjContext有一个有效的内存位置,但代码行不断地反复出现,从而导致XCode崩溃

self.managedObjectContext只是我在SecondViewController类上拥有的一个属性,其声明如下:

@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
如果我使用注释掉的行,它就可以正常工作:

NSManagedObjectContext *context = managedObjContext;
因此,使用属性似乎是造成问题的原因,但我当然希望使用它。有没有解释为什么它不想使用该物业

谢谢!
跳蚤

self.managedObjectContext=相当于调用
setManagedObjectContext:
。因此,您将进入一个递归循环

当覆盖ivar的设置程序时,您需要直接访问ivar,例如:

- (void)setManagedObjectContext:(NSManagedObjectContext *)managedObjContext;
{
  _managedObjectContext = managedObjectContext;
}
通常,如果要做其他事情,只需重写setter的默认实现