gpt4 book ai didi

iphone - iOS:生成的 CoreData 代码中的 EXC_ARM_DA_ALIGN

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

我觉得我在这个问题上开始失去理智了。

我已经开始使用 SDK 提供的生成的 CoreData 代码开发 CoreData iOS 应用程序。每当我尝试实例化一个实体的新实例以便保存它时,我的问题就会出现。

根据 Apple CoreData 教程,这是我的 AppDelegate 中的实例化代码(我已经将一堆代码移到那里只是为了尝试调试此问题):

NSManagedObjectContext* context = [self managedObjectContext];
if (!context)
{
NSLog(@"Error"); // I'm not too concerned about my error handling just yet
}

紧接着,这是产生我遇到的错误的行:

Vehicle* vehicle = (Vehicle*)[NSEntityDescription insertNewObjectForEntityForName:@"Vehicle" inManagedObjectContext:context];

有问题的错误是:

Thread 1: EXC_BAD_ACCESS (code=EXC_ARM_DA_ALIGN address=0xdeadbeef)

总而言之,除了存在内存对齐问题(ARMv7 常见?)以及我在 Google 上找到的资源对我没有丝毫帮助外,我真的不知道这意味着什么。

唯一相关的另一段代码是 Xcode 在生成项目时提供的“managedObjectContext”方法,因为它首先生成了 managedObjectContext:

- (NSManagedObjectContext *)managedObjectContext
{
if (__managedObjectContext != nil) {
return __managedObjectContext;
}

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
__managedObjectContext = [[NSManagedObjectContext alloc] init];
[__managedObjectContext setPersistentStoreCoordinator:coordinator];
}

return __managedObjectContext;
}

就像我说的,我已经超出了我的理解范围。任何人都可以清楚地说明我如何解决这个问题吗?

最佳答案

__managedObjectContext 可能未初始化(因此具有 0xdeadbeef 的值),这会导致 EXC_ARM_DA_ALIGN 在尝试读取值时产生副作用从它。

@肯尼温克EXC_ARM_DA_ALIGN 通常来自非实际类型的访问指针值。例如

char buf[8];
double d = *((double *)buf); // this may cause EXC_ARM_DA_ALIGN

但它也可能导致指针无效,在本例中为0xdeadbeef。例如

double *ptr; // not initialized
double d = *ptr; // this is undefined behaviour, which may cause EXC_ARM_DA_ALIGN or other error

通常很难调试这类错误,这里有一些提示:

  1. 检查所有指针转换(即 (double *)(void *)ptr)并尽可能避免它们。
  2. 确保一切都已初始化。
  3. 当它崩溃时,找出导致它崩溃的变量并尝试回溯以找出值从何而来。使用调试器查看内存位置有助于找出变量的所有更改。

关于iphone - iOS:生成的 CoreData 代码中的 EXC_ARM_DA_ALIGN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10958273/

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