gpt4 book ai didi

objective-c - 删除后尝试保存时核心数据崩溃

转载 作者:可可西里 更新时间:2023-11-01 05:42:43 24 4
gpt4 key购买 nike

我无法保存 Core Data 中的上下文。

当我尝试调用 [context save:] 时随机崩溃。有时它可以工作,有时它不会并使应用程序崩溃。这是我的删除代码。通过检查 [context respondsToSelector] 是否保存,我已经能够减少崩溃次数。奇怪的是,即使它失败了(respondsToSelector 失败),而且我没有调用保存,它仍然被删除了!?但是当 respondsToSelector 成功并且我尝试调用保存时,它有时仍然会崩溃。所以代码在测试中更稳定一点,但我认为核心数据和保存方法有问题。很难找到这个问题,因为它看起来确实是随机的。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the managed object.
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
Accidents* accidentDelete = [self.fetchedResultsController objectAtIndexPath:indexPath];
[context deleteObject:accidentDelete];

// Causing crash...
NSError *error = nil;

if ([context respondsToSelector:@selector(save:)])
if (![context save:&error]) {
// Update to handle the error appropriately.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
else
NSLog(@"Error! Context does not respond to save!");
}
}

最佳答案

我假设崩溃意味着——EXC_BAD_ACCESS。如果没有,请发布您遇到的异常和堆栈跟踪。

EXC_BAD_ACCESS 发生是因为您正在访问坏内存。通常这是因为您正在访问释放的内存。追踪它的最简单方法是打开僵尸——这会使所有 dealloc 什么都不做,但是当你访问一个调用了 dealloc 的对象时,它会在控制台中提示,并指出你正在访问的确切位置一个被释放的对象。

我在这里解释了很多关于 EXC_BAD_ACCESS 的更多信息,以及一些故障排除说明(以及打开僵尸的说明)

http://www.loufranco.com/blog/files/Understanding-EXC_BAD_ACCESS.html

Go to Project->Edit Active Executable, go to the Arguments tab and in the environment variables section, add

NSAutoreleaseFreedObjectCheckEnabled 
NSZombieEnabled
NSDebugEnabled

And set each to YES. You can leave them there unchecked, but if you check them, then your application will now do some extra checking on autorelease and release and give you a good stack trace when you have done it wrong. A common problem is to think you need to call release when the object is already set to autorelease (see yesterday's post on what the rules are for that).

关于objective-c - 删除后尝试保存时核心数据崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3846362/

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