2014-09-19 96 views
1

在我今天的扩展与我的设备解锁,这行代码按预期运行,从图像路径返回数据:加载文件时,设备被锁定

let imageData = NSData(contentsOfFile: path) 

然而,当我的设备已被锁定用密码,它返回零。设备锁定时,有没有办法访问文件系统中的图像?我可以很好地访问UserDefaults,但不能访问我的共享组的目录中的文件。这里是我正在创建的路径,呼吁imagePath,这是正确填入我希望在这两种情况下的路径:

func rootFilePath() -> String? { 
    let manager = NSFileManager() 
    let containerURL = manager.containerURLForSecurityApplicationGroupIdentifier(GROUP_ID) 
    if let unwrappedURL = containerURL { 
     return unwrappedURL.path 
    } 
    else { 
     return nil 
    } 
} 

func imagePath() -> String? { 
    let rootPath = rootFilePath() 
    if let uPath = rootPath { 
     return "\(uPath)/\(imageId).png" 
    } 
    else { 
     return nil 
    } 
} 
+0

对此有何动静?我遇到了同样的问题。 – 2014-10-02 02:29:47

+0

不...还没有。而这个帖子上的人声称他根本没有问题,尽管我不相信它,我觉得文件系统只是用密码锁定 - 虽然我还没有搜索过文档。 http://stackoverflow.com/a/25844434/431271 – ccwasden 2014-10-02 13:49:34

回答

0

我想通了!您需要设置相应的文件权限:

NSFileManager *fm = [[NSFileManager alloc] init]; 
NSDictionary *attribs = @{NSFileProtectionKey : NSFileProtectionNone}; 
NSError *unprotectError = nil; 

BOOL unprotectSuccess = [fm setAttributes:attribs 
          ofItemAtPath:[containerURL path] 
            error:&unprotectError]; 
if (!unprotectSuccess) { 
    NSLog(@"Unable to remove protection from file! %@", unprotectError); 
} 

在你通常不会想这样做很多时候,但由于信息意在从锁定屏幕看到,我OK与删除文件保护。

+0

你能分享完整的代码吗?如果'containerURL'为零,那么你如何在其上设置属性? – strangetimes 2015-08-28 02:55:19

+0

@strangetimes如果它是零,那么你有一个更大的问题比试图解除不存在的文件。我建议问一个新问题。 – 2015-08-28 18:03:27

+0

对不起,我以为你上面说过,它实际上返回零?当设备没有被锁定时,是否在你给它一个零的时候取消它的保护,或者你之前是否做了保护? – strangetimes 2015-08-28 18:40:38