Kullanıcı veya uygulama tarafından iCloud'un Mobil Belgeler dizininde oluşturulan bir dizinde okumak istiyorum./Mobil Belgeler). iCloud: Kullanıcı tarafından oluşturulan dizinlerde nasıl okunur?
predicateWithFormat:@"%K.pathExtension = ''", NSMetadataItemFSNameKey
kullanarak) benim klasörleri temsil herhangi bir nesneyi içermez: İşte bu dizin gibi görünebilir nasıl bir örnektir. Txt dosyaları için bir sorgu çalıştırırsam (
@"%K ENDSWITH '.txt'", NSMetadataItemFSNameKey
kullanarak), sırasıyla txt dosyaları için 5 nesne döndürülür. Txt dosyalarını aramak böylece çalışır, ancak dizinler için değil.
docs üzerinden okumak, Apple'ın dizinler yerine NSFileWrapper (Dosya Paketleri) kullanmayı önerdiğini fark ettim. ICloud, kullanıcı veya uygulama tarafından oluşturulan dizinleri işleyemez/algılayamaz mı?
-(void)loadDocument {
NSMetadataQuery *query = [[NSMetadataQuery alloc] init];
_query = query;
//Search all files in the Documents directories of the application’s iCloud container directories:
[query setSearchScopes:[NSArray arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"%K.pathExtension = ''", NSMetadataItemFSNameKey];
[query setPredicate:pred];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(queryDidFinishGathering:) name:NSMetadataQueryDidFinishGatheringNotification object:query];
[query startQuery];
}
- (void)queryDidFinishGathering:(NSNotification *)notification {
NSMetadataQuery *query = [notification object];
[query disableUpdates]; // You should invoke this method before iterating over query results that could change due to live updates.
[query stopQuery]; // You would call this function to stop a query that is generating too many results to be useful but still want to access the available results.
[self loadData:query];
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSMetadataQueryDidFinishGatheringNotification object:query];
_query = nil; // we're done with it
}
- (void)loadData:(NSMetadataQuery *)query {
NSLog(@"Query count %i", [query resultCount]);
for (int i=0; i < [query resultCount]; i++) {
NSMetadataItem *item = [query resultAtIndex:i];
NSURL *url = [item valueForAttribute:NSMetadataItemURLKey];
NSLog(@"%i.URL: %@", i, url);
}
}
Hiç bu konuda uğraştın mı? Ne yararına olursa olsun, Mountain Lion kullanıcılarında, uygulamanın içindeki Açık panelden klasörler oluşturabilirler. NSMetadataQuery' API'sini orada denediniz mi? Bu bize iOS'ta nasıl değiştiğine dair bir ipucu vermeli ... – nacho4d
@ nacho4d hayır, sonunda klasörlerle gitmedim, üzgünüm. Söylediğiniz gibi, bu M Lion ile değişebilir. Bir yol bulursan beni haberdar et. –
Sadece kayıt için (çünkü zaten fark ettim) Çünkü burada bir çalışma yayınladım: http://stackoverflow.com/questions/7873974/returning-a-list-of-directories-with-nsmetadataquery-and-nspredicate/10510752 # 10510752 – nacho4d