3

마지막 문서의 자동 다시 열기 기능을 해제하는 방법은 무엇입니까? 내 응용 프로그램을 실행하면마지막 문서의 자동 다시 열기를 비활성화하는 방법은 무엇입니까?


, 그것은 방법 readFromData를 호출합니다.

그러나 문제는 내 버전 1과 버전 2 사이에 응용 프로그램에서 저장 한 데이터 구조를 변경했기 때문입니다. v1에서 루트 객체는 배열이었습니다. v2에서 루트 객체는 두 개의 키가있는 사전입니다. 하나는 문자열이고 다른 하나는 배열입니다.

응용 프로그램이로드 될 때 데이터에서 배열을로드 한 다음이 배열에서 dictionary의 키에 대한 개체를 가져 오는 것으로 보입니다.

어떻게해야합니까? ??

PS : 나는

 -(BOOL)applicationShouldOpenUntitledFile:(NSApplication*)app 
     { 
      return YES; 
     } 


     - (BOOL)applicationOpenUntitledFile:(NSApplication *)sender 
     { 
      return YES ; 
     } 

와 NSApplicationDelegate을 만들려고하지만, 이러한 방법은 내 응용 프로그램에 의해 호출되지 않습니다.


편집 : 여기

이 호출 스택입니다 : 당신이 readFromData:을 구현하는 방법을

0 CoreFoundation      0x00007fff8bc06f56 __exceptionPreprocess + 198 
1 libobjc.A.dylib      0x00007fff81f37d5e objc_exception_throw + 43 
2 CoreFoundation      0x00007fff8bc931be -[NSObject doesNotRecognizeSelector:] + 190 
3 CoreFoundation      0x00007fff8bbf3e23 ___forwarding___ + 371 
4 CoreFoundation      0x00007fff8bbf3c38 _CF_forwarding_prep_0 + 232 
5 dictionnaireDouchoutique   0x0000000100007f22 -[Document readFromData:ofType:error:] + 498 
6 AppKit        0x00007fff89af3558 -[NSDocument readFromURL:ofType:error:] + 665 
7 AppKit        0x00007fff8999198c -[NSDocument _initForURL:withContentsOfURL:ofType:error:] + 151 
8 AppKit        0x00007fff89991890 -[NSDocument initForURL:withContentsOfURL:ofType:error:] + 360 
9 AppKit        0x00007fff89991677 -[NSDocumentController makeDocumentForURL:withContentsOfURL:ofType:error:] + 199 
10 AppKit        0x00007fff8999150f __-[NSDocumentController reopenDocumentForURL:withContentsOfURL:display:completionHandler:]_block_invoke_5 + 150 
11 AppKit        0x00007fff89991467 __-[NSDocumentController reopenDocumentForURL:withContentsOfURL:display:completionHandler:]_block_invoke_4 + 697 
12 AppKit        0x00007fff899911a9 -[NSDocumentController _openDocumentWithContentsOfURL:usingProcedure:] + 530 
13 AppKit        0x00007fff89990d95 __-[NSDocumentController reopenDocumentForURL:withContentsOfURL:display:completionHandler:]_block_invoke_3 + 242 
14 libdispatch.dylib     0x00007fff86329a82 _dispatch_call_block_and_release + 18 
15 libdispatch.dylib     0x00007fff8632b8f2 _dispatch_main_queue_callback_4CF + 308 
16 CoreFoundation      0x00007fff8bb9be7c __CFRunLoopRun + 1724 
17 CoreFoundation      0x00007fff8bb9b486 CFRunLoopRunSpecific + 230 
18 HIToolbox       0x00007fff87d652bf RunCurrentEventLoopInMode + 277 
19 HIToolbox       0x00007fff87d6c56d ReceiveNextEventCommon + 355 
20 HIToolbox       0x00007fff87d6c3fa BlockUntilNextEventMatchingListInMode + 62 
21 AppKit        0x00007fff8973d779 _DPSNextEvent + 659 
22 AppKit        0x00007fff8973d07d -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 135 
23 AppKit        0x00007fff897399b9 -[NSApplication run] + 470 
24 AppKit        0x00007fff899b5eac NSApplicationMain + 867 
25 dictionnaireDouchoutique   0x00000001000075d2 main + 34 
26 dictionnaireDouchoutique   0x0000000100001984 start + 52 
+0

응용 프로그램 위임자의 메서드가 문제와 관련이있는 이유는 무엇입니까? 그들은 기존 파일을 열지 않고 새로운 문서를 만드는 것을 다룹니다. 그건 그렇고,'applicationOpenUntitledFile :'은 실제로 당신이해야 할 제목없는 파일을 열지 않습니다. GNU 버전의 UNIX'true' 명령처럼, 당신은 아무 것도하지 않습니다. –

+0

문제는 내 응용 프로그램이 마지막 문서를 열려고 했으므로 잘못된 데이터를 처리하려고 시도한 것입니다. 그래서, 제 아이디어는 응용 프로그램에 마지막 문서를 열어 보지 말라고 명령하는 것입니다. – Colas

+1

그 방법은 그렇게하지 않습니다. 그들은 긍정적 인 "당신이해야 할 일"과 "지금해라.", "우리의 방법 이름이 언급하지 않은 다른 일을해서는 안된다"는 부정적인 의미가 아닙니다. –

답변

1

NSPropertyListSerialization을 사용하여 데이터를 직렬화 해제 한 다음 respondsToSelector: 또는 isKindOfClass: 검사를 사용하여 전달한 루트 개체의 종류를 확인합니다. 배열이면 처리하십시오. 그것이 사전이라면, 그것을 처리하십시오; 인식 할 수없는 것이면 the file is garbage을 나타내는 오류를 반환하십시오.

+0

저장된 문서를 열지 않아서 내 응용 프로그램이'readFromData'를 호출하는 이유는 무엇입니까?나는 단지 응용 프로그램을 시작합니다! 어쨌든, 고마워, 나는 너의 생각을 시도 할 것이다! – Colas

+1

@Colas : 마지막으로 열어 본 문서가 모두 다시 열리는 것 같습니다. 해당 메소드에서'self.fileURL'을 로그하여 어떤 것을 볼 수 있습니다. –

+0

대답 : (null) ... – Colas

0

당신은 나열하지 않는다, 그러나 당신이 NSKeyedUnarchiver를 사용하는 경우 개체의 유효성을 검사 containsValueForKey:을 사용할 수 있습니다 data 매개 변수

이전 버전과 호환되지 않게하려면 이전 버전을 감지하고 오류 매개 변수를 채울 수 있습니다.

+0

저장된 문서를 열지 않아서 내 응용 프로그램이'readFromData'를 호출하는 이유는 무엇입니까? 나는 단지 응용 프로그램을 시작합니다! 어쨌든, 고마워, 나는 너의 생각을 시도 할 것이다! – Colas

2

NSDocument 하위 클래스에서 + (BOOL)autosavesDraft을 재정의하고 NO을 반환하면 개발 중에도 안전합니다. 그러나 프로덕션 환경에서는 충돌없이 다른 파일 형식을 처리해야합니다. ...

+0

내 모델이 바뀌고 있습니다. 그 이유가 여기 있습니다! – Colas