加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 17:39:23 所属栏目:百科 来源:网络整理
导读:我觉得我开始在这个问题上失去理智. 我已经开始使用SDK提供的生成的CoreData代码处理CoreData iOS应用程序.每当我尝试实例化实体的新实例以便我可以保存它时,就会出现问题. 根据Apple CoreData教程,我的AppDelegate里面有我的实例化代码(我在那里移动了一堆
我觉得我开始在这个问题上失去理智.

我已经开始使用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常见的问题)之外,我真的不知道这意味着什么,而我在谷歌上发现的资源并没有帮助我.

唯一的其他相关代码是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作为副作用.

@Kenny Winker
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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读