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 iOS và Uniform 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?
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