2011-04-11 6 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; 
} 

여기서 로그온 시트 nib 파일은 NewPassword입니다.

무엇이 잘못되었는지 궁금합니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

답변

1

unrecognized selector (Apple과 함께 남긴) 문제 외에도 원래 문제 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"를 호출했을 때 작동합니다. –

0

unrecognized selector 문제는 xib 파일을 처음부터 작성한 후에 해결되었습니다. 이것은 Xcode 4의 IB와 관련하여 심각한 문제를 나타냅니다. 바인딩 및 키 - 지급 등을 생성하는 데 사용 된 시트 및 속성의 속성이 두 경우 모두 동일하게 보였으므로 IB에서 인터페이스를 생성하는 동안 내가 한 일은 첫 번째 시도에서 xib 파일의 손상을 일으켰습니다.

이 문제를 삭제하거나 유지하려면 포럼 관리자에게 맡기십시오. 누구에게나 가치있는 것이라면 Apple에 버그 리포트를 제출할 것입니다. (아래 참조)

+0

Apple Bug Reporter에 문제를 제기했습니다. 문제 ID : 9277602. 재미있는 것이 나오면 알려 드리겠습니다. –

관련 문제