2016-10-02 1 views
1

내 Mac 앱에서 드래그를 시작하려고합니다. 드래그가 네이티브 UTI와 파일 약속을 제공하여 사용자가 클립을 데스크톱으로 드래그 할 수있게하고 싶습니다.코코아에서 HFS Promise 드래그에 다른 페이스트 보드 유형을 추가하려면 어떻게해야합니까?

애플의 obsolete documentation에 따르면,이를 달성하는 방법은 다음과 같습니다 dragPromisedFilesOfTypes:fromRect:source:slideBack:event:

  • 와 "약속"드래그 오프

    1. 킥이 dragImage:at:offset:event:pasteboard:source:slideBack:

    를 재정 의하여 추가로 대지의 유형을 추가

    이 문제는 Apple이 이후 AppKit의 dragImage: 메소드를 대체했다는 것입니다. beginDraggingSession: ... 및 dragPromisedFilesOfTypes:은 (는) 호출하지 않습니다.

    지금이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

  • 답변

    0

    그래서 스스로 약속을 설정해야합니다. 예를 들어,이 예에서,

    let writer = NSPasteboardItem() 
    
        // We can provide "MP3" data, and/or a "File promise" 
        writer.setDataProvider(
         data_source, 
         forTypes: [ kUTTypeMP3, kPasteboardTypeFileURLPromise] 
        ) 
    
        // If the receiver wants the "File promise", we'll 
        // be writing a "CAF file" for them 
        writer.setString(AVFileTypeCoreAudioFormat, forType: kPasteboardTypeFilePromiseContent) 
    
        let drag_item = NSDraggingItem(pasteboardWriter: writer) 
    
        let drag_session = self.beginDraggingSession(with: [drag_item], event: event, source: self) 
    

    , 나는 즉시 MP3를 제공 할 수있는 일반 드래그, 또는 CAF 파일에 대한 약속을 설정합니다.

    그런 방식으로 드래그를 시작하면 "dragPromisedFilesOfTypes :"와 마찬가지로 "namesOfPromisedFilesDropped :"가 호출되지만 약속되지 않은 콘텐츠를 설정할 수도 있습니다.


    편집 : 덕분에 맥 OS 10.12 아마 간단하다 "NSFilePromiseProvider"를 추가하는 지적에 대해 jnadeau합니다. 10.10 및 10.11을 지원해야하지만 다른 사람이 유용하다고 생각할 경우이 내용을 언급합니다.

    관련 문제