EXC_BAD_ACCESS 在多个设备上使用 iCloud
Posted
技术标签:
【中文标题】EXC_BAD_ACCESS 在多个设备上使用 iCloud【英文标题】:EXC_BAD_ACCESS using iCloud on multiple devices 【发布时间】:2012-05-24 18:47:47 【问题描述】:我正在使用 iCloud 创建一个应用程序。但我有一些问题。它使用 NSFileWrapper 在 iCloud 上创建目录,然后在 NSFileWrapper 目录中创建 NSData(容器)文件。我正在使用此代码将 NSFileWrapper 转换为 NSMutableArray:
NSFileWrapper *MyWrapper=[[[MyDocument data] fileWrappers] objectForKey:@"myFile.doh"];
NSData *MyData=[NSData dataWithData:[MyWrapper regularFileContents]];
NSMutableArray *MyList=[NSPropertyListSerialization propertyListFromData:MyData mutabilityOption:NSPropertyListMutableContainers format:nil errorDescription:nil];
而且它只能在创建了这个容器的设备上正常工作。在其他设备上,此代码的结果是 BAD_ACCESS(在代码的第二行,我开始对数据进行处理)。调试时,函数“regularFileContents”返回具有正确数据大小的正确对象,但是当我尝试读取此数据时,会发生 BAD_ACEESS(code=10)。
我用的是ARC,所以不是内存管理错误。
问题可能出在某些项目/代码符号设置中?有什么想法吗?
谢谢!
【问题讨论】:
【参考方案1】:我也遇到了这个问题,经过大量实验后,我发现即使外部包装器已经下载了内部内容,但实际上还没有下载,这会导致对 regularFileContents 的调用失败。
我一直在 MyWrapper 上调用 startDownloadingUbiquitousItemAtURL,一旦完成,错误就消失了。这是一种检查文件下载状态的方法(假设您知道 MyWrapper 的 url)并在尚未下载时开始下载。
-(BOOL)downloadFileIfNotAvailable:(NSURL*)fileURL
NSNumber *isInCloud = nil;
if ([fileURL getResourceValue:&isInCloud forKey:NSURLIsUbiquitousItemKey error:nil])
if ([isInCloud boolValue])
NSNumber *isDownloaded = nil;
if ([fileURL getResourceValue:&isDownloaded forKey:NSURLUbiquitousItemIsDownloadedKey error:nil])
if ([isDownloaded boolValue])
return YES;
NSError *error = nil;
[[NSFileManager defaultManager] startDownloadingUbiquitousItemAtURL:fileURL error:&error];
if (error)
NSLog(@"Download Failed :: %@", error);
return NO;
return YES;
【讨论】:
这听起来很棒。我自己也遇到了这个崩溃,遗憾的是永远无法重现它。但这听起来像是你发现了它。希望这也能为我解决。您不知道如何对其进行测试?以上是关于EXC_BAD_ACCESS 在多个设备上使用 iCloud的主要内容,如果未能解决你的问题,请参考以下文章
设备上的 Xcode5 调试 - EXC_BAD_ACCESS
iPhone 模拟器启动时的 EXC_BAD_ACCESS。应用程序在设备上运行
在 glGenTextures 上获取 EXC_BAD_ACCESS