2012-01-26 13 views
6

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?

+1

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

Odpowiedz

3

Jest to zgodne z projektem.

Interfejs API działa również w przypadku Spotlight. Nie powinno się wchodzić w dokumenty pakietu, ponieważ zawartość tych dokumentów jest w zasadzie prywatna. W przypadku iCloud nie ma to większego sensu, ale podejrzewam, że nie będą go zmieniać. Nie ma sensu, aby interfejs API działał na dwa różne sposoby w zależności od tego, gdzie jest używany.

Domyślam się, że jest to historyczna sprawa - na komputerze Mac można zaimplementować importer Spotlight do obsługi niestandardowego typu dokumentu. W systemie iOS nie sądzę, aby było to możliwe (popraw mnie, jeśli się mylę). Na razie musisz po prostu obejść tę "funkcję" API.

Możesz wyszukać dokument, a następnie pobrać metadane z tego miejsca. W przeciwnym razie, łańcuchowe rozszerzenie powinno zostać wykonane.

1

Uaktualnienie do iOS 5.1 beta 3 lub nowszego. Nie wierzę, że UIManagedDocument + iCloud działa w ogóle w iOS 5.0.

+0

Właściwie uaktualniłem ostatnio wersję beta do wersji 5.1, ale bardzo szybko powróciłem do wersji 5.0 ze względu na niewiarygodnie frustrujący błąd składania/wcięcia kodu w bieżącym podglądzie Xcode 4.3. Podczas korzystania z najnowszej wersji beta ten problem z pakietem plików był nadal obecny. – Stuart

Powiązane problemy