EXC_BAD_ACCESS在多个设备上使用的iCloud(EXC_BAD_ACCESS using

2019-06-24 18:44发布

我创建配合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,所以它不是内存管理错误。

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

谢谢!

Answer 1:

我碰到了这个问题,以及和多次实验后,我发现,即使外包装已下载内容内还没有实际下载却并导致调用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;
}


文章来源: EXC_BAD_ACCESS using iCloud on multiple devices