objective-c – 在多个设备上使用iCloud的EXC_BAD_ACCESS
发布时间:2020-12-16 07:00:05 所属栏目:百科 来源:网络整理
导读:我正在用iCloud创建一个应用程序.但我有一些问题.它使用NSFileWrapper在iCloud上创建目录,然后在NSFileWrapper目录中创建NSData(容器)文件.我正在使用此代码将NSFileWrapper转换为NSMutableArray: NSFileWrapper?*MyWrapper=[[[MyDocument?data]?fileWrappe
我正在用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(代码= 10). 我正在使用ARC,所以这不是内存管理的错误. 可能是在一些项目/代码签名设置中的问题?有任何想法吗? 谢谢! 解决方法
我也遇到了这个问题,经过多次实验后我发现,即使外包装已下载,内部内容还没有实际下载,导致对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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |