2010-03-22 7 views
13

Làm cách nào để thả tệp (hoặc chọn mở tệp trong Trình tìm kiếm) của loại được chỉ định trong Info.plist vào biểu tượng đế của tôi rồi gọi phương thức có đường dẫn đầy đủ của tệp ?Thả tệp vào biểu tượng Dock trong Cocoa

+0

Tôi không hiểu câu hỏi. Người dùng có đang kéo tệp vào biểu tượng Dock của bạn hay bạn muốn mở tệp theo chương trình? –

+0

Tôi có nghĩa là để thực sự có được đường dẫn đến tập tin đã được thả vào biểu tượng dock. –

Trả lời

15

Nếu bạn đã thiết lập đúng mảng CFBundleDocumentTypes của Info.plist (hoặc 'LSItemContentTypes' hoặc 'CFBundleTypeExtensions'), thì bạn chỉ cần thiết lập ủy quyền NSApplication và triển khai phương thức ủy nhiệm, application:openFile:.

Nếu bạn đang mong đợi nhiều tệp bị xóa cùng một lúc, hãy triển khai application:openFiles:.

Đối với các tệp đã hứa (NSFilesPromisePboardType/kPasteboardTypeFileURLPromise) xem Dropping promised files on to application icon in Dock.

+0

Tôi đã thiết lập đúng mảng CFBundleDocumentTypes của mình và đã viết phương thức, nhưng biểu tượng dock sẽ không chấp nhận tệp của tôi. –

+0

Tristian Seifert: Một nguyên nhân có thể có của vấn đề đó là bạn đã chỉ định một UTI trong plist của bạn, nhưng đó là một sai lầm: http: // boredzo.org/blog/archives/2007-07-23/cách làm cho ứng dụng của bạn-dock-tile-highlight Bạn cũng nên đảm bảo nhập bất kỳ UTI nào bạn đề cập trong plist: http://developer.apple. com/mac/library/documentation/FileManagement/Conceptual/knowledge_utis/ –

+0

Sau khi đọc hai tài liệu này, tôi vẫn chưa hiểu cách thêm UTI vào PList hiện tại của mình. Đây là một phần nhỏ của Info.plist của tôi: \t \t \t \t \t CFBundleTypeIconFile \t \t \t Draft.icns \t \t \t CFBundleTypeExtensions \t \t \t \t \t \t \t podraft \t \t \t \t \t \t CFBundleTypeName \t \t \t Bưu Dự thảo \t \t Những gì tôi sẽ phải thêm vào định nghĩa này nên dock sẽ chấp nhận File? –

0

Nếu bạn đang thực sự tạo một ứng dụng dựa trên tài liệu, hãy thiết lập ứng dụng để cung cấp cho bạn đường dẫn sẽ giúp bạn làm việc hiệu quả hơn bạn cần. Chỉ cần sử dụng mẫu ứng dụng dựa trên tài liệu. Bộ điều khiển tài liệu sẽ tạo một thể hiện của lớp phù hợp cho bạn; bạn chỉ cần viết lớp đó.

Ứng dụng mà bạn tạo theo cách này sẽ xử lý các tệp tin thả xuống (bằng cách mở chúng dưới dạng tài liệu) miễn phí.

+0

Nó không phải là một tài liệu dựa trên ứng dụng, Nó là một trình đọc Email, và tôi muốn để có thể kéo dự thảo, hộp thư, vv vào biểu tượng dock của tôi. –

1

Chọn ứng dụng của bạn trong nhóm mục tiêu của ngăn bên và sử dụng thông tin. Sau đó, trong cửa sổ mới, chọn thẻ thuộc tính để thêm một loại tài liệu mới. Đặt tên nó là "Thư mục" để thuận tiện và các loại Hệ điều hành cần phải "gấp"; loại cửa hàng và vai trò bạn có thể để nguyên.

+0

Cảm ơn Điều đó đã giúp tôi làm cho ứng dụng của tôi hoạt động. – AmitSri

5

Trên hệ thống hiện tại, bạn có thể sử dụng UTI thay vì kiểu bốn kiểu cũ (chẳng hạn như fold ở trên). Trong trình soạn thảo loại tài liệu Xcode của, tạo ra một loại mới với:

  • Tên: Thư mục
  • Định danh: public.folder

public.folder là một subtype của public.directory. public.folder khớp với các thư mục xuất hiện như vậy đối với người dùng, nghĩa là không phải gói như .app trình bao bọc.

8

Dưới đây là một giải pháp cập nhật cho Xcode 5. Trong AppDelegate.m

-(BOOL)application:(NSApplication *)sender openFile:(NSString *)filename 
{ 
    NSLog(@"%@", filename); 
    return YES; 
} 

Và trong Xcode loại tài liệu thiết lập dưới Dự án> Mục tiêu> Thông tin: Project > Info > Document Types

thiết lập Kiểm tra trong Info.plist trong trường hợp bạn có một mảng 'Loại nội dung tài liệu UTI' trống cần được điền chính xác hoặc bị xóa khác. Delete empty Document Content Type UTIs array from Info.plist

Info.plist bạn nên tìm một cái gì đó như thế này: Document Types Info.plist

+0

câu trả lời tuyệt vời! rất hữu ích. thanks – gypsyDev

+0

Lưu ý rằng điều này sẽ làm cho ứng dụng của bạn chấp nhận * bất kỳ * tệp nào, không chỉ là một phần mở rộng đã cho, vì CFBundleTypeExtensions được đặt thành '*'. Nếu bạn chỉ hỗ trợ một số tiện ích mở rộng tệp nhất định, hãy chỉ định chúng ở đó thay thế. Nếu không, hệ điều hành sẽ cung cấp để mở các tệp ngẫu nhiên với ứng dụng của bạn chỉ để ứng dụng của bạn thất bại sau đó. – uliwitness