我创建配合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一旦完成走了错误。 下面是检查文件的下载状态(假设你知道的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;
}