首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何绕过NSCocoaErrorDomain:257从文件应用程序中提取文件?

如何绕过NSCocoaErrorDomain:257从文件应用程序中提取文件?
EN

Stack Overflow用户
提问于 2019-10-03 17:10:53
回答 2查看 6.5K关注 0票数 10

我试图访问一个文件,以便将一个副本拖到我的应用程序中,这样用户就可以将其与相关信息联系起来。直到最近,它还能正常工作,现在我突然收到了以下信息:

读取文件失败,错误Domain=NSCocoaErrorDomain Code=257“文件名”无法打开,因为您没有查看它的权限。UserInfo={NSFilePath=/private/var/mobile/Library/Mobile文档/com~apple~CloudDocs/文件名,NSUnderlyingError=0x281b88690 {Error Domain=NSPOSIXErrorDomain Code=1“不允许操作”}

这是抛出错误的代码:

代码语言:javascript
运行
复制
//AppDelegate.m
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
    if (![url.pathExtension isEqualToString:@"pdf"] && ![url.pathExtension isEqualToString:@"png"] && ![url.pathExtension isEqualToString:@"jpg"] && ![url.pathExtension isEqualToString:@"jpeg"]){
        return false;
    }
    NSError* error = nil;
    NSString *path = [url path];
    NSData *data = [NSData dataWithContentsOfFile:path options: 0 error: &error];
    if(data == nil) {
        NSLog(@"Failed to read file, error %@", error);
    }

    //Do stuff with the file    

    return true;
}

我确实更新了xcode 11和iOS 13,所以可能有一个我不知道的变化。

EN

Stack Overflow用户

回答已采纳

发布于 2019-10-03 17:10:53

结果是有一个“使用”函数告诉应用程序它在沙箱之外访问文件。NSURL上的startAccessingSecurityScopedResourcestopAccessingSecurityScopedResource方法需要使用url包装在代码周围,如下所示:

代码语言:javascript
运行
复制
BOOL isAcccessing = [url startAccessingSecurityScopedResource];
NSError* error = nil;
NSString *path = [url path];
NSData *data = [NSData dataWithContentsOfFile:path options: 0 error: &error];
if(data == nil) {
    NSLog(@"Failed to read file, error %@", error);
}
if (isAccessing) {
    [url stopAccessingSecurityScopedResource];
}

我不确定iOS 13是否有任何特定的东西需要它,而以前它并不需要这样做,但这是它工作和不工作之间唯一的真正变化。

票数 27
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58223929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档