ios - 使用密码在锁定屏幕上更改 NSFileManager 用户/权限

标签 ios objective-c nsfilemanager

当受密码保护的 iPhone 被锁定并且应用程序在后台运行时,它们是否以不同的用户身份运行?

以下代码始终在模拟器中运行,并且在屏幕未锁定时在物理设备上运行。锁屏时,报error 13: operation not permitted

 if (![[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error]) {
            NSLog(@"Could not create data directory: %@", [error localizedDescription]);
            NSLog(@"error: %@", [error description]);
    } else {
        NSLog(@"\n\n----Created OpenSenseData Directory----");
    }
}

代码是由于 CLLocationManager 接收到位置更新而调用的。

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

可能的解释是应用程序在后台以不同的用户身份运行。如果是这样,有没有办法更改应用程序权限以允许在屏幕锁定时创建文件或目录?

最佳答案

这是数据权限的问题,可以通过从父目录中删除 NSFileDataProtection 来解决。必须在应用程序处于前台时创建初始父目录,这确实从相关文件中删除了加密

NSDictionary *protection = [NSDictionary dictionaryWithObject:NSFileProtectionNone forKey:NSFileProtectionKey];
[[NSFileManager defaultManager] setAttributes:protection ofItemAtPath:parentDirectoryPath error:nil];
[[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error];

关于ios - 使用密码在锁定屏幕上更改 NSFileManager 用户/权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29475352/

相关文章:

ios - 使用 YouTube API 获取 YouTube 视频的标题

ios - 应该使用 nil 和 Nil 以及 ios 中的 Null 有什么区别?

cocoa - 为什么 NSDirectoryEnumerator 在这里获取隐藏文件?

iphone - NSFileManager - 在启动时复制文件

ios - TableView中的CollectionView显示错误的Data swift

ios - WKWebView 中的嵌入式 YouTube 视频禁用全屏模式

ios - 核心数据:将 3 个实体中的对象提取到一次提取中并按日期排序?

iphone - 在 AppDelegate 完成加载之前,我的 iPhone 应用程序在加载时崩溃

iphone - 关于调用我的属性

iOS 文档文件夹不是目录和/或丢失