2010-12-02 2 views
3

NSTableView 행에서 파일을 드래그하여 다른 응용 프로그램 (Finder)에 복사하려고합니다. 이 가이드의 처음 두 단계 ('테이블보기 구성', '드래그 작업 시작하기')를 구현하면 트릭을 수행 할 수 있다고 생각했습니다. http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/TableView/Tasks/UsingDragAndDrop.htmlNSTableView에서 다른 osx 응용 프로그램으로 파일을 드래그

그러나 행을 드래그하려고하면 행 텍스트는 내 마우스를 따르지만 파일이 출시 될 때 복사되지 않습니다.

- (BOOL)tableView:(NSTableView *)aTableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard 
{ 
    NSLog(@"writeRowsWithIndexes"); 
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:rowIndexes]; 
    [pboard setData:data forType:librarySongDataType]; 
    return YES; 
} 

내가 ', 명확하게하려면 :

여기
#define librarySongDataType @"NSFileContentsPboardType" 
- (void)awakeFromNib 
{ 
    [self setDraggingSourceOperationMask:NSUIntegerMax forLocal:YES]; // allow interapplication drags 
    [self registerForDraggedTypes:[NSArray arrayWithObject:librarySongDataType] ]; // NSFileContentsPboardType 
} 

내가 내 NSTableView는 데이터 소스 (AN NSArrayController)에서 드래그를 처리하고있어 방법 : 여기가 초기화시 내 jQuery과에 보낸다 무엇 파일을 내 테이블 뷰로 드래그하지 않으려 고합니다. 파일을 드래그하려고합니다.

+1

'NSTableView'라고 생각합니다. 'UITableView'는 iPhone에만 있습니다. – d11wtq

+0

아, 죄송합니다. 나는 NSTableView를 의미했다. 수정 해줘서 고마워. 편집 됨. – tassock

답변

9

먼저이 줄을 작성했을 때 어떤 문서를 참조 했습니까?

[self setDraggingSourceOperationMask:NSUIntegerMax forLocal:YES]; 

이것은 의미가 없습니다. NSUIntegerMax을 사용하지 마십시오. 정의 된대로 작업 마스크를 사용하십시오 here. 그곳에는 NSUIntegerMax이 모든 것을 의미하지만, 사용해서는 안됩니다. Apple은 앞으로이 비트를 다시 정의 할 것입니다. NSDragOperationCopy 또는 특정 내용을 사용해야합니다. 웹 페이지 또는 책에서 해당 행을 복사 한 경우 해당 책/웹 페이지 신뢰를 중단해야합니다.

둘째, forLocal:NO이어야 다른 응용 프로그램으로 데이터를 전달할 수 있습니다. local은 로컬 응용 프로그램을 의미합니다. 셋째

, 대신 NSFileWrapper을하고 writeFileWrapper:를 사용하여 설정을 고려 바로

[pboard setData:data forType:librarySongDataType]; 

에 보관 된 데이터를 설정하는, here를 참조하십시오. 그렇게하면 Finder에서 생성 될 파일 이름을 지정할 수 있습니다. 그렇지 않으면 시스템은 데이터가 나타내는 것을 전혀 모릅니다.

+0

도움을 많이 주셔서 감사합니다! "forLocal"매개 변수에 대한 수정으로 인해 해결되었습니다. – tassock

+0

왜 내 응용 프로그램에서만 마분지를 인식했는지에 대한 문제가 해결되었습니다. –

관련 문제