2013-09-01 5 views
1

NSOutlineViewDataSource을 구현하여 Finder로 드래그 할 때 파일 시스템에 존재하지 않는 디렉토리를 드래그하는 방법은 무엇입니까? 나는 수 많은 문서를 수색하고 검색하여 읽었지만, 작동하는 가치있는 것을 찾는 데는 큰 어려움을 겪었다. 필자는 파일 시스템과 같은 트리를 관리하는 사용자 지정 데이터 소스를 사용하며 모든 항목은 해당 경로를 추적하는 클래스의 인스턴스입니다. 개요보기에서 파일 및 디렉토리를 Finder로 드래그 할 수 있기를 바랍니다.NSOutlineView는 디렉토리로 약속 함

나는이 :

- (BOOL)outlineView:(NSOutlineView *)outlineView 
     writeItems:(NSArray *)items 
     toPasteboard:(NSPasteboard *)pasteboard 
{ 
    NSMutableArray *types = [NSMutableArray array]; 
    for (JOItemInfo *itemInfo in items) { 
     NSString *extension = itemInfo.name.pathExtension; 
     if (extension.length > 0) [types addObject:extension]; 
    } 

    [pasteboard declareTypes:@[(__bridge_transfer NSString *)kPasteboardTypeFileURLPromise] 
         owner:self]; 
    [pasteboard setPropertyList:types 
         forType:(__bridge_transfer NSString *)kPasteboardTypeFileURLPromise]; 
    DDLogInfo(@"Wrote types %@ to pasteboard %@ for key %@", 
       types, 
       pasteboard, 
       (__bridge_transfer NSString *)kPasteboardTypeFileURLPromise); 
    return YES; 
} 

, 지정된 경로의 내부 항목을 기록 -outlineView:namesOfPromisedFilesDroppedAtDestination:forDraggedItems:의 구현. 이것은 Finder로 항목을 드래그 할 수 있다는 점에서 작동하지만, 아무 것도하지 않으면 아무 일도 일어나지 않고 -...namesOfPromisedFilesDropped... 메서드도 호출되지 않습니다. 또한

[self.outlineView setDraggingDestinationFeedbackStyle:NSTableViewDraggingDestinationFeedbackStyleRegular]; 
[self.outlineView setDraggingSourceOperationMask:NSDragOperationNone forLocal:YES]; 
[self.outlineView setDraggingSourceOperationMask:NSDragOperationCopy forLocal:NO]; 

이 내 -awakeFromNib에 있습니다. if (extension.length > 0) ...은 어딘가에서 발견 된 예제를 기반으로했지만 날짜가 있기 때문에 문서에서 확장 프로그램을 반환한다고 나와 있으므로 적절하다고 생각합니다. 개인적으로이 전체 영역에 대한 문서가 부족하다는 것을 알았습니다. 특히 NSOutlineView과 관련하여. 감사!

답변

2

(__bridge_transfer NSString *)kPasteboardTypeFileURLPromiseNSFilesPromisePboardType으로 변경했으며 이제는 파일을 드래그하여 (적어도 확장자 포함) Finder에서 성공적으로 삭제할 수 있습니다. (나는 이전의 b/c를 사용했는데, 후자에 대한 문서는 그것을 권장했지만, 같은 효과가 없다.)

또한 조건부를 제거하고 빈 확장을 위해 빈 문자열을 추가 할 수 있도록 노력했다. , 그것은 매력처럼 움직였다. 필자는 아웃 라인보기에서 파인더로 끌 수 있습니다.