Używam UIManagedDocument
s do zarządzania moimi plikami w iCloud. Po skonfigurowaniu NSMetadataQuery
tak:NSMetadataQuery ignorowanie niestandardowego typu pliku pliku
iCloudQuery = [[NSMetadataQuery alloc] init];
[iCloudQuery setSearchScopes:
[NSArray arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]];
[iCloudQuery setPredicate:
[NSPredicate predicateWithFormat:@"%K like %@", NSMetadataItemFSNameKey, @"DocumentMetadata.plist"]];
jestem napotyka dziwny problem - kiedy moje dokumenty są nazwane bez rozszerzenia pliku (na przykład @"NewDocument2"
) lub rozszerzeniem publicznym jak .txt
, kwerendy metadane prawidłowo znajdzie DocumentMetadata.plist
plik. Jednak przy korzystaniu z mojego niestandardowego rozszerzenia pliku zapytanie nigdy nie znajdzie niczego ... nie po uruchomieniu zapytania ani po dodaniu nowego dokumentu.
Wydaje mi się, że zapytanie prawdopodobnie widzi mój dokument z niestandardowym rozszerzeniem pliku, nie zdaje sobie sprawy, że jest to w rzeczywistości katalog (pakiet plików w każdym razie), a więc nie wygląda wewnątrz, aby znaleźć plik DocumentMetadata.plist
. Jednak zadeklarowałem swoje niestandardowe UTI w aplikacji: info.plist
.
Być może błędnie zadeklarowałem swoje UTI? Postępowałem zgodnie z wytycznymi Apple'a (w Document-Based App Programming Guide for iOS i Uniform Type Identifiers Overview), ale wydaje się, że coś jest nie tak.
Edit: Under 'ZUM eksportowanych' w info.plist
, mój typ jest ustawiony w celu dostosowania się do 'com.apple.package'.
Edit: ja wciąż zmaga się z tym problemem. Pracuję nad tym teraz, nie używając rozszerzenia pliku.
Podczas korzystania z niestandardowego rozszerzenia pliku przetwarzam wyniki zapytania o metadane iCloud, a plik DocumentMetadata.plist
zdecydowanie znajduje się w pakiecie plików, ale zapytanie o metadane nie może go zobaczyć. Podczas wyliczania wyników zapytania, co następuje jest drukowany w dzienniku:
<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
(Istnieje także kilka plików w katalogu „CoreDataLogs”, jednak nie pokazać je tutaj dla uproszczenia).
Mogę tylko myśleć, że ten problem jest związany z nieprawidłowym tworzeniem pliku UTI dla mojego pliku. Czy ktokolwiek inny z powodzeniem użył niestandardowych pakietów plików w iCloud? Czy to błąd?
Ciągle zmagam się z bólem UIManagedDocument. Tak naprawdę nie jest to odpowiedź, ale warto rozważyć przechowywanie UIManagedDocuments poza folderem "Documents". W przeciwnym razie, gdy użytkownik przejdzie do Ustawienia-> iCloud-> Pamięć i archiwizacja-> Zarządzaj pamięcią masową->, zobaczą wpisy DocumentMetadata.plist. Umieściłem moje dokumenty w osobnym folderze na tym samym poziomie, co Dokumenty. Następnie zapytanie powinno korzystać z NSMetadataQueryUbiquitousDataScope. Nie jesteś pewien, czy potrzebujesz rozszerzenia pliku, czy też ma to sens w tym przypadku. –
Daniel