2012-03-12 15 views
13

NSFileManager'un startDownloadingUbiquitousItemAtURL numarasını kullanarak iCloud'dan yerel kopyaya dosya yükleyin (bu dosyada yerel dosyanın henüz kopyası bulunmuyor). Bu süreç için geri dönüşümü bulamıyorum. Uygulamamın istenen dosyanın indirilip (yerel kopyaya) bittiğini bildirmek için geri aramaya ihtiyacım var, böylece diğer görevler dosyanın içeriğini okumaya başlayabilir ve bir şeyler yapar.iCloud: NSFileManager'ın sürümü için geri bildirimİndirmeUbiquitousItemAtURL?

Dosyanın indirilip yüklenmediğini kontrol edebilirim. Fakat sürekli olarak oylamayı içerir. Bunun için anket yapmak için bir zamanlayıcı ayarlamadan bunu yapmanın bir yolu var mı?

cevap

28

Bu yöntemin, Apple's documentation numaralı dosya koordinatörleriyle birlikte kullanılması amaçlandığını düşünüyorum. Yani şöyle bir dosya koordinatörü kullanmak gerekir:

NSURL *itemURL = nil; // this is the URL you want to read from 

__block NSData *data = nil; 
NSError *error = nil; 
NSFileCoordinator *coordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil]; 
[coordinator coordinateReadingItemAtURL:itemURL options:0 error:&error byAccessor:^(NSURL *newURL) { 
    data = [NSData dataWithContentsOfURL:newURL]; 
}]; 

Ancak bu, senkron olacak, uyumsuz bir şey yapmak istedim eğer öyleyse, bunu Gibi blok kullanabilirsiniz:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    // read info from the URL using the code above 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     // handle data read from the URL 
    }); 
}); 
+1

NSFileCoordinator yöntemi, senkron modda güzel çalışır. Ayrıca projemin daha sonraki aşamasında async versiyonuna ihtiyacım vardı - bunun için oy kullanıldı! Teşekkür ederim. – user523234

+0

@SpaceDog% 100 haklısınız. Bu API'ları ve açıkçası, emmekle uğraşıyorum. – mattsven

+3

Apple tarafından oluşturulan API'lar iki kategoriye ayrılabilir: 1) emen, cehennem gibi karışık, belirsiz, eksik ve kötü belgelenmiş olanlar ve 2) geçerliliği olanlar. İyi tasarlanmış tek bir API yoktur. Beni yanlış anlama. Apple'ın ürünlerini seviyorum ama geliştiriciler ve API'lar ile ilgilenen Apple, yüksek standartları olan insanların bilmediği bir Apple değil. Aksine. – SpaceDog

-1

için iCloud'a doğru şekilde yükle, ayrıca böyle bir şeye ihtiyacınız olacak (başka bir şey işe yaramadı: |)

NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]; 

    NSString *FileNS = @"myfile.dat"; 
    NSURL *FileURL = [[ubiq URLByAppendingPathComponent:@"Documents"] URLByAppendingPathComponent:FileNS ]; 


    BYTE *data = NULL;//Put your file data in here 
    int FileSize = 0;//replace with your file size 
    NSData *myData = [[NSData alloc] initWithBytes:data length:FileSize]; 
    [myData writeToFile:[FileURL path] atomically:YES]; 
+0

op, indirmek istedi, yüklenmedi – SpaceDog

İlgili konular