2012-01-26 21 views
6

Tôi đang sử dụng UIManagedDocument để quản lý tệp của mình trong iCloud. Sau khi thiết lập các NSMetadataQuery như vậy:NSMetadataQuery bỏ qua loại gói tệp tùy chỉnh

iCloudQuery = [[NSMetadataQuery alloc] init]; 
[iCloudQuery setSearchScopes: 
    [NSArray arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]]; 
[iCloudQuery setPredicate: 
    [NSPredicate predicateWithFormat:@"%K like %@", NSMetadataItemFSNameKey, @"DocumentMetadata.plist"]]; 

Tôi đang gặp phải một vấn đề tò mò - khi tài liệu của tôi được đặt tên mà không có một phần mở rộng tập tin (ví dụ @"NewDocument2") hoặc một phần mở rộng công cộng như .txt, truy vấn siêu dữ liệu tìm thấy một cách chính xác DocumentMetadata.plist tệp. Tuy nhiên, khi sử dụng phần mở rộng tập tin tùy chỉnh của tôi, truy vấn không bao giờ tìm thấy bất cứ điều gì ... không phải khi truy vấn bắt đầu, cũng không phải khi tôi thêm một tài liệu mới. Có vẻ như với tôi rằng truy vấn có thể thấy tài liệu của tôi với phần mở rộng tệp tùy chỉnh của nó, không nhận ra rằng thực tế, một thư mục (gói tệp ở bất kỳ mức độ nào) và do đó, không nhìn bên trong để tìm tệp DocumentMetadata.plist. Tuy nhiên, tôi đã khai báo UTI tùy chỉnh của mình trong info.plist của ứng dụng.

Có lẽ tôi đã khai báo sai UTI của mình? Tôi đã làm theo hướng dẫn của Apple (trong số Document-Based App Programming Guide for iOSUniform Type Identifiers Overview) trong việc tạo ra nó, nhưng có vẻ như có điều gì đó sai.


Edit: Dưới 'UTIs xuất khẩu' trong info.plist, loại của tôi được thiết lập để phù hợp với 'com.apple.package'.


Edit: Tôi vẫn đang phải vật lộn với vấn đề này. Tôi đang làm việc xung quanh nó bây giờ bằng cách không sử dụng một phần mở rộng tập tin.

Khi sử dụng đuôi tệp tùy chỉnh, tôi đang xử lý kết quả truy vấn siêu dữ liệu iCloud và tệp DocumentMetadata.plist chắc chắn nằm trong gói tệp nhưng truy vấn siêu dữ liệu không thể nhìn thấy. Khi liệt kê các kết quả truy vấn, sau đây được in để đăng nhập:

<iCloud Container URL>/Documents/ 
<iCloud Container URL>/Documents/New%20Document.spdoc/ 
<iCloud Container URL>/Documents/New%20Document.spdoc/DocumentMetadata.plist 
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/ 
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/(A%20Document%20Being%20Saved%20By%20<AppName>%202)/ 
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/(A%20Document%20Being%20Saved%20By%20<AppName>)/ 
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/.persistentStore_SUPPORT/ 
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/.persistentStore_SUPPORT/_EXTERNAL_DATA/ 
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/persistentStore 

(Ngoài ra còn có một loạt các tập tin trong một "CoreDataLogs" thư mục, tuy nhiên tôi không cho họ vào đây để ngắn gọn).

Tôi chỉ có thể nghĩ rằng vấn đề này liên quan đến việc tạo không chính xác gói tệp UTI của tôi. Có ai khác đã sử dụng thành công gói tệp tùy chỉnh với iCloud không? Đây có phải là một lỗi?

+1

Vẫn gặp khó khăn khi tự mình trải qua cơn đau UIManagedDocument. Đây không thực sự là câu trả lời, nhưng bạn có thể cân nhắc việc lưu trữ các tài liệu UIManagedDocuments bên ngoài thư mục "Documents". Nếu không, khi người dùng vào Settings-> iCloud-> Storage & Backup-> Manage Storage->, họ sẽ thấy mục DocumentMetadata.plist. Tôi đặt tài liệu của mình vào một thư mục riêng ở cùng cấp với Tài liệu. Sau đó truy vấn của bạn nên sử dụng NSMetadataQueryUbiquitousDataScope. Bạn không chắc chắn nếu bạn sẽ cần một phần mở rộng tập tin, hoặc nếu nó có ý nghĩa trong trường hợp này. – Daniel

Trả lời

3

Đây là theo thiết kế.

API cũng hoạt động theo cách này cho Tiêu điểm. Nó không nên đi vào các tài liệu gói vì nội dung của các tài liệu đó về cơ bản là riêng tư. Với iCloud, điều này không có ý nghĩa gì nhiều, nhưng tôi nghi ngờ rằng họ sẽ không thay đổi nó. Nó sẽ không có ý nghĩa đối với các API để làm việc theo hai cách khác nhau tùy thuộc vào nơi nó đang được sử dụng.

Tôi đoán đây là một điều lịch sử - trên Mac, bạn có thể triển khai một trình nhập Spotlight để xử lý loại tài liệu tùy chỉnh của mình. Trên iOS, tôi không nghĩ rằng điều này là có thể được nêu ra (sửa tôi nếu tôi sai). Vì vậy, bây giờ, bạn chỉ cần làm việc xung quanh 'tính năng' này của API.

Bạn có thể tìm kiếm tài liệu thay thế và sau đó chỉ nhận siêu dữ liệu từ đó. Nếu không, chuỗi mở rộng như bạn đã làm sẽ hoạt động.

1

Nâng cấp lên iOS 5.1 beta 3 trở lên. Tôi không tin rằng UIManagedDocument + iCloud hoạt động ở tất cả trong iOS 5.0.

+0

Thực ra tôi đã nâng cấp lên phiên bản 5.1 beta mới nhất gần đây, nhưng rất nhanh chóng quay trở lại 5.0 do lỗi mã gấp/thụt lề vô cùng bực bội trong bản xem trước hiện tại của Xcode 4.3. Trong khi sử dụng bản beta mới nhất, vấn đề này vẫn tồn tại. – Stuart

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