2011-04-11 60 views
1

我已加密文档。将每个文档解压后,我需要提示用户从登录表中输入文档密码。我有办法验证对文件内容的密码输入(这部分完成)。如果密码不正确,文件应关闭。如果密码正确,文档窗口应显示文档内容。提示用户登录加密文档

当我试图加载在文档的windowControllerDidLoadNib方法登录片(通过其控制器)我无法识别选择错误,如下所示:

- (void)windowControllerDidLoadNib:(NSWindowController *)aController 
{ 
    [super windowControllerDidLoadNib:aController]; 

    if (!newPasswordController){ 
     newPasswordController = [[NewPasswordController alloc] init]; 
     newPasswordSheet = [newPasswordController window]; 
    } 
    [NSApp beginSheet:newPasswordSheet modalForWindow:[self window] 
     modalDelegate:self 
     didEndSelector:@selector(didNewPasswordEnd:returnCode:contextInfo:) 
      contextInfo:nil]; 

} 

[_NSControllerObjectProxy copyWithZone:]: unrecognized selector sent to instance 

方法[NewPasswordController init]是这样实现的:

-(id)init 
{ 
    self = [super initWithWindowNibName:@"NewPassword"]; 
    if (self) { 
    } 
    return self; 
} 

其中登录表单笔尖文件被称为NewPassword

我不知道出了什么问题。解决这个问题的最好方法是什么?

回答

1

除了unrecognized selector问题(这是我留给苹果)我设法解决原有问题Prompting the user to logon for encrypted documents这里是解决方案。

注意每个文件都有密码保护,他们可能会回应不同的密码(所以问题不是'密码保护申请',而是'密码保护文件')。

简单地注入下面的代码时,我们将要读取文件内容,弹出应用程序模式窗口,以验证文档密码:

- (BOOL)readFromData:(NSData *)data 
     ofType:(NSString *)typeName 
     error:(NSError **)outError 
{ 
    PasswordController *passwordController = [[PasswordController alloc] init]; 
    NSWindow *passwordSheet = [passwordController window]; 

    NSApplication* app = [NSApplication sharedApplication]; 
    NSInteger iret = [app runModalForWindow:passwordSheet]; 
    NSLog(@"password dialog returned = %ld", iret); 
    if (iret != 0) 
    { 
     [app stop:self]; 
     return NO; 
    } 
    [passwordController release]; 
    ... 

您也可以弹出另一种窗口的文档时第一次保存在dataOfType,迫使用户设置文档的密码。

此问题现已解答。

+0

当使用“beginSheet”(在Xcode7中)时,我得到了“无法识别的选择器”,但它在我用代码调用“runModalForWindow”时起作用。 – 2015-07-18 14:23:10

0

在我从头开始构建xib文件后,问题unrecognized selector已解决。这表明在XCode 4中有关IB的一个严重问题,因为在这两种情况下,表单的属性和创建绑定,密钥支付等的步骤看起来都是相同的。我在IB的界面建设过程中所做的一些事情在我的第一次尝试中导致了xib文件中的腐败。

我会让论坛管理员删除或保留此问题。如果是价值的人,我会文件与苹果的bug报告(见下文)

+0

我已经提交了Apple Bug Reporter的问题。问题ID:9277602. 如果有什么有趣的东西出来,我会告诉你。 – 2011-04-13 11:05:24