加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读