在多台设备上使用iCloud的EXC_BAD_ACCESS

我正在用iCloud创build一个应用程序。 但是我有一些问题。 它使用NSFileWrapper在iCloud上创build目录,然后在NSFileWrapper目录下创buildNSData(容器)文件。 我正在使用此代码将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]; 

它只能在已创build此容器的设备上正常工作。 在其他设备上,这个代码的结果是BAD_ACCESS(在代码的第二行,我开始做一些数据)。 在debugging时,函数“regularFileContents”返回正确数据大小的对象,但是当我尝试读取这些数据时,会发生BAD_ACEESS(code = 10)。

我使用ARC,所以这不是内存pipe理的错误。

可能是一些项目/代码标志设置的问题? 有任何想法吗?

谢谢!

我遇到了这个以及经过多次实验后,我发现,即使外包装已下载的内容还没有实际下载,并导致调用regularFileContents失败。

我一直在MyWrapper上调用startDownloadingUbiquitousItemAtURL ,一旦完成,错误消失了。 下面是一个检查文件下载状态的方法(假设你知道这个URL到你的MyWrapper),如果还没有下载,就开始下载。

 -(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; }