微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用NSOpenPanel限制对某些文件夹的访问

如何解决使用NSOpenPanel限制对某些文件夹的访问

| 我正在使用NSOpenPanel允许用户选择一个文件夹来将文档保存到其中。我想限制它们可以保存到哪个文件夹(就层次结构而言)。本质上,我想阻止他们选择上面的任何文件夹:   /用户/用户名/ 所以文件夹   /用户/用户名/猫/ 可以接受,但   /用户/用户名/      /应用程序/猫/ 将不会被允许。我想知道如何实施此限制。 谢谢。     

解决方法

请注意,“ 0”继承自“ 1”,而“ 1”又定义了一个委托和一个相应的委托协议“ 2”。您可以使用委托来扩展打开的面板的行为,以便包括您在问题中列出的限制。 例如,假设应用程序委托实现了开放面板限制,则使其符合the2ѭ协议:
@interface AppDelegate : NSObject <NSApplicationDelegate,NSOpenSavePanelDelegate>
@end
在您的应用程序委托的实现中,告诉打开的面板该应用程序委托充当打开的面板委托:
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel setDirectory:NSHomeDirectory()];
[openPanel setCanChooseDirectories:NO];
[openPanel setDelegate:self];
[openPanel runModal];
并实现以下委托方法:
- (BOOL)panel:(id)sender shouldEnableURL:(NSURL *)url {
    NSString *path = [url path];
    NSString *homeDir = NSHomeDirectory();

    return [path hasPrefix:homeDir] && ! [path isEqualToString:homeDir];
}

- (void)panel:(id)sender didChangeToDirectoryURL:(NSURL *)url {
    NSString *path = [url path];
    NSString *homeDir = NSHomeDirectory();

    // If the user has changed to a non home directory,send him back home!
    if (! [path hasPrefix:homeDir]) [sender setDirectory:homeDir];
}

- (BOOL)panel:(id)sender validateURL:(NSURL *)url error:(NSError **)outError {
    NSString *path = [url path];
    NSString *homeDir = NSHomeDirectory();

    if (![path hasPrefix:homeDir]) {
        if (outError)
           *outError = ; // create an appropriate NSError instance

        return NO;    
    }
    return YES;
}
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。