2009-02-01 20 views
14

Một số ứng dụng, như Photoshop, cho phép người dùng kéo ảnh từ trình duyệt web hoặc kéo tệp từ hệ thống tệp, lên biểu tượng của ứng dụng trong thanh công cụ. Việc này sẽ mở tệp trong ứng dụng đó.Làm cách nào để ứng dụng OS X phản ứng khi một tệp, hình ảnh, v.v ... bị bỏ trên biểu tượng đế của nó?

Điều này được thực hiện như thế nào? Tôi muốn sử dụng Cocoa và Objective-C, nhưng tôi quan tâm đến bất kỳ giải pháp nào trong bất kỳ ngôn ngữ nào.

+0

Tôi không nghĩ rằng bạn có thể sử dụng Cocoa và C#.Tôi chỉ biết các ràng buộc Cocoa từ Ruby, Python và Objective-C (với Objective-C là hỗ trợ tốt nhất, từ sự hiểu biết của tôi). Trong khi bạn có thể viết các ứng dụng OS X bằng C# với Mono, tôi không nghĩ rằng bạn có thể sử dụng Cocoa từ C#. – Andy

+1

Tìm kiếm Cocoa # Andy. –

Trả lời

4

Nếu ứng dụng của bạn dựa trên tài liệu và bạn điền đầy đủ các khóa cần thiết vào Info.plist của mình, thì nó chỉ hoạt động. Khi người dùng kéo tập tin vào ô Dock của ứng dụng, Dock sẽ đánh dấu ứng dụng của bạn trên ô nếu tệp đó thuộc loại bạn đã đăng ký và nếu người dùng xóa tệp đó, NSDocumentController sẽ khởi tạo một trong các lớp tài liệu của bạn tập tin. Nếu tệp không thuộc loại bạn đăng ký, cả hai tệp sẽ bỏ qua nó.

Vậy, dựa trên tài liệu ứng dụng của bạn? Nếu vậy, tệp này có phải là một trong những loại bạn đã đăng ký không?

Để biết thêm thông tin:

+0

Liên kết hiện tại tới "Hướng dẫn lập trình ứng dụng dựa trên tài liệu cho Mac" là https://developer.apple.com/library/mac/documentation/DataManagement/Conceptual/DocBasedAppProgrammingGuideForOSX/Introduction/Introduction.html – canhazbits

19

NSApplication cho phép bạn thiết lập một đại biểu cho ứng dụng của bạn. Nếu người dùng kéo tệp vào biểu tượng dock của bạn, NSApplication sẽ gọi phương thức

- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename 

đối tượng đại biểu của bạn, trong trường hợp nó thực hiện bất kỳ phương pháp nào như vậy. Trong trường hợp nội dung không thực sự là tệp (ví dụ: nếu người dùng chỉ chọn văn bản trong ứng dụng và kéo nó vào biểu tượng đế), phương thức ủy quyền

- (BOOL)applicationOpenUntitledFile:(NSApplication *)theApplication 

được gọi.

Xem NSApplication class reference

Về cơ bản bạn chỉ có thể tạo ra bất kỳ đối tượng của bất cứ loại nào (ví dụ một đơn giản mà chỉ thừa hưởng của NSObject), xác định hai phương pháp trên trong đối tượng và sau đó bất cứ nơi nào trong đầu của bạn lên quy tắc ứng ứng dụng bạn làm

whatever = [[YourObject alloc] init]; 
[[NSApplication sharedApplication] setDelegate:whatever]; 

Và đó là nó. Ngay sau khi một tập tin hoặc một số nội dung khác được thả vào biểu tượng dock, phương thức thích hợp được gọi và phải xử lý yêu cầu đó. BTW cùng các phương thức được gọi nếu ứng dụng của bạn liên kết với một loại tệp (ví dụ: myFileType) và người dùng nhấp đúp vào một tệp có phần mở rộng đó trong Trình tìm kiếm.

Điều thực sự xảy ra đằng sau hậu trường là Dịch vụ khởi chạy sẽ gửi ứng dụng của bạn cho sự kiện Apple "mở tài liệu" ('odoc'). NSApplication theo mặc định đăng ký một xử lý cho sự kiện này và chuyển tiếp yêu cầu bằng cách gọi phương thức ủy nhiệm thích hợp. Bạn cũng có thể nghe trực tiếp sự kiện Apple này mà tôi đoán, nhưng tại sao bạn? Đối phó với sự kiện Apple trực tiếp là khó xử. Khi ứng dụng của bạn không phải là Cocoa, nhưng Carbon (plain-C), bạn có thể phải trực tiếp xử lý Sự kiện Apple (tôi không quen với Carbon), nhưng trong Cocoa Apple đã nắm bắt được các sự kiện quan trọng nhất của Apple cho bạn và chuyển đổi chúng vào các cuộc gọi hoặc thông báo đại diện mà ứng dụng của bạn có thể nghe.

Các vấn đề liên quan