Iphone 尝试从prepareForSegue设置ManagedObjectContext属性时出现错误\u访问错误
我正在使用CoreData,并尝试将ManagedObjectContext对象从一个视图控制器传递到另一个视图控制器 以下是我的第一个视图控制器代码: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 =
- (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的默认实现