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

时间:2015-04-06 16:33:32

标签: 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

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

1 个答案:

答案 0 :(得分:2)

这是数据权限的问题,可以通过从父目录中删除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];