gpt4 book ai didi

iphone - 尝试从prepareForSegue设置ManagedObjectContext属性时出现BAD_ACCESS错误

转载 作者:行者123 更新时间:2023-11-29 04:08:18 25 4
gpt4 key购买 nike

我正在使用 CoreData,并尝试将 ManagedObjectContext 对象从一个 ViewController 传递到第二个 View Controller。

这是我的第一个 View Controller 的代码:

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

prepareForSegue 调用我在第二个 View Controller 上创建的名为 setManagedObjectContext 的方法:

-(void)setManagedObjectContext:(NSManagedObjectContext *)managedObjContext
{
self.managedObjectContext = managedObjContext;
//NSManagedObjectContext *context = managedObjContext;
}

当此代码命中时,Xcode 会锁定并最终引发 BAD_Access 内存错误。当我调试这段代码时, ManagedObjContext 有一个有效的内存位置,但是代码行不断地一遍又一遍地点击,然后导致 XCode 崩溃。

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

@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;

如果我使用它,注释掉的行就可以正常工作:

NSManagedObjectContext *context = managedObjContext;

所以看起来使用属性导致了问题,但我当然想使用它。有什么解释为什么它不喜欢使用该属性(property)吗?

谢谢!跳蚤

最佳答案

self.managementObjectContext = 相当于调用 setManagedObjectContext:。所以你让自己陷入了递归循环。

当覆盖 ivar 的 setter 时,您需要直接访问 ivar,例如

- (void)setManagedObjectContext:(NSManagedObjectContext *)managedObjContext;
{
_managedObjectContext = managedObjectContext;
}

通常,如果您打算执行其他操作,则只需覆盖 setter 的默认实现即可。

关于iphone - 尝试从prepareForSegue设置ManagedObjectContext属性时出现BAD_ACCESS错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14837325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com