iphone – iOS:生成的CoreData代码中的EXC_ARM_DA_ALIGN
我觉得我开始在这个问题上失去理智.
我已经开始使用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 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)并尽可能避免它们.>确保所有内容都已初始化.>当它崩溃时,找出导致它崩溃的变量,并尝试追溯以找出值来自何处.使用调试器来查看内存位置有助于找出变量的所有更改. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |