2011-04-11 46 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