2010-06-07 3 views
0

좋아요, NSOutlineView를 설정 했으므로 PDF가 NSOutlineView로 드래그되면 PDF를 캡쳐하고 싶습니다.코코아 끌어서 놓기, 데이터를 다시 읽음

[outlineView registerForDraggedTypes:[NSArray arrayWithObjects:NSStringPboardType, NSFilenamesPboardType, nil]]; 

나는 또한 MySupportedType 드래그에 등록 된 객체 인 같은 것을 본 적이 본 적이있는 모든 사과 문서 도구 및 예에서 :

내 첫 번째 질문은, 나는 다음과 같은 코드가 있습니다. 이것은 무엇을 의미 하는가? 그러나,이,

[outlineView registerForDraggedTypes:[NSArray arrayWithObjects:@"pdf", NSStringPboardType, NSFilenamesPboardType, nil]]; 

현재 나는 그것이 드래그 앤 드롭을 인식하도록 설정해야하고, 드래그가 감지되면 난 그것을 드래그 된 파일의 URL을 뱉어 수 있습니다 : 내가 할 코드를 변경합니까 제 두 번째 질문으로 안내합니다. 나는 그 PDF의 애플 리케이션 측면의 사본을 보관하고 싶습니다. 나는 틀렸다고 나에게 생각하고 정정한다. 이것을하기위한 가장 좋은 방법은 클립 보드에서 데이터를 가져 와서 일부 영구 저장소에 저장하는 것이다. (복사 명령의 일종을 사용하여 app 디렉터에게 파일을 그대로 복사하는 것으로 가정).

그런 말을하는 방법은 확실하지 않습니다. 나는 코드를 가지고있다 :

- (BOOL)outlineView:(NSOutlineView *)ov acceptDrop:(id <NSDraggingInfo>)info item:(id)item childIndex:(NSInteger)childIndex 
{ 
    NSPasteboard *pboard = [info draggingPasteboard]; 
    NSURL *fileURL; 
    if ([[pboard types] containsObject:NSURLPboardType]) { 
     fileURL = [NSURL URLFromPasteboard:pboard]; 
     // Perform operation using the file’s URL 
    } 

    NSData *data = [pboard dataForType:@"NSPasteboardTypePDF"]; 

그러나 이것은 실제로 어떤 데이터도 가져 오지 않는다. 전에 말했듯이, 그것은 URL이 아니라 단지 데이터를 얻습니다. 누구든지이 문제를 해결하는 방법에 대한 조언이 있습니까? 정말 고마워!

답변

4

끌어온 유형

끌어온 유형은 (일부 내부 ID로 위젯을 표시하는 "MyWidgetIdentifierType"와 같은) 시스템 판지 (NSFilenamesPboardType 등)를 입력하거나 앱의 자신의 내부 유형을 정의하는 문자열입니다.

드래그 유형 "PDF"로는 아무 것도 얻을 수 없습니다. 당신은 "Bob8374Type"이라고 부를 수도 있습니다 ... 앱에 유형을 인식하는 기능을 제공하지 않으면 (또는 그 유형의 대지에 아무것도 넣지 않은 경우), 그것은 전혀 쓸모가 없습니다. 드래그 된 파일로 작업 중이므로 NSFilenamesPboardType이 정확합니다.

NSPasteboardTypePDF는 NSPasteboardTypePDF 데이터가 대지 위에 있지 않으면 도움이되지 않습니다. 파일을 드래그하면 NSFilenamesPboardType이됩니다. 파일이 .pdf인지 또는 .xyz인지는 중요하지 않습니다. 너는 길 밖에 얻지 못한다.

복사 파일 또는 당신은 당신이 그것에 삭제 된 PDF를 복사하거나 경로를 저장 (또는 더 나은 아직, 파일 시스템 참조)하려는 여부를 결정해야합니다 경로

를 저장합니다. PDF를 복사하려면 적절한 저장 위치 (예 : Application Support 폴더 등)를 알고 있는지 확인해야합니다.

실제로 삭제 된 pdfs를 어딘가에 복사하려는 경우 PDF 데이터가 필요하지 않습니다. NSFileManager를 사용하여 지정된 경로에있는 파일을 새 위치로 복사 (또는 이동) 할 수 있습니다. 다른 저장 메커니즘이 있다면 (즉, 파일의 PDF 데이터를 다른 데이터 구조로 빨아 들이기를 원한다면) NSData의 +dataWithContentsOfURL:options:error:을 사용하여 PDF 데이터를 직접 가져 와서 원하는 데이터로 처리하면됩니다.

+0

정말 도움이됩니다. 그 문제를 해결해 주셔서 감사합니다. 정말 감사. – kodai