2017-01-18 18 views
4

Q : 응용 프로그램 다시 시작하는 동안 지속적 문서 기반 ™ 응용 프로그램에서 NSDocument의 독특한 식별자를 취득 할 수있는 방법이 있습니까?NSDocument 고유 식별자



주 : 응용 프로그램이 자동으로 저장하고 아직 저장되지 않은 문서와 잘 작동하기 때문에 확실히 일부 단지 fileURL 아닌 ID의 종류,하지만 다른 뭔가가 있어야한다.

참고 2 : 몇 가지 이유로이 ID를 생성하여 문서의 콘텐츠 파일에 유지하고 싶지 않습니다.

+0

문서가 하나의 파일이나 패키지입니까? 메타 데이터를 저장할 위치가 있습니까? –

+0

@MichaelDautermann 단일 텍스트 파일입니다. – kisileno

+1

관련 질문 : [NSFileSystemFileNumber는 파일이 대상 C에서 편집되거나 업데이트 된 후에 변경됩니다] (http://stackoverflow.com/q/30187163/4244136) – Willeke

답변

0

I 문서 폐쇄 중에있어서 encodeRestorableStateWithCoder 코더로 데이터를 저장하고 문서가 다시 열릴 때 restoreDocumentWindowWithIdentifier 해당 데이터를 복원 끝났다.

- (void) encodeRestorableStateWithCoder: (NSCoder *) coder { 
    [super encodeRestorableStateWithCoder: coder]; 
    [coder encodeObject: @{@"color":@"red"} forKey: @"OBJECT_KEY"]; 
} 

- (void) restoreDocumentWindowWithIdentifier: (NSString *) identifier 
             state: (NSCoder *) state 
          completionHandler: (void (^) (NSWindow *, NSError *)) completionHandler { 
    NSDictionary * restoredInfo = [state decodeObjectForKey: @"OBJECT_KEY"]; 
    [super restoreDocumentWindowWithIdentifier: identifier state: state completionHandler: completionHandler]; 
} 

거기에 생성 된 UID를 저장할 수는 있지만이 저장소는 그리 신뢰할 수 없을 수도 있습니다.

2

비록 내가 그것을 시도하지 않았다, 나는 확장 된 속성이 작업 할 수 있다고 생각합니다 : 확장 된 속성이나 파일 자체도 모든 파일 시스템에 대한 표준의 일부이기 때문에

uuid_t uuid; 
[[NSUUID new] getUUIDBytes:uuid]; 

int result = setxattr(path, "com.yourcompany.yourapp.yourattr", &uuid, sizeof(uuid), 0, 0); 

을, 그들은 할 수있다 이러한 특성을 지원하지 않는 파일 시스템을 사용하여 저장소에 파일을 복사 할 때 손실됩니다.