2014-03-19 118 views
3

我想在從iCloud下載UIDocument時顯示進度條。從iCloud下載文件時顯示進度百分比?

我試圖從查詢保持到NSMetadataItem參考要求它爲它的屬性每秒,但關鍵NSMetadataUbiquitousItemPercentDownloadedKey不存在,或者一旦文件被下載它突然變成100

相關代碼:

// get meta data item from query 

NSNumber *downloadProgress = [self.documentMetadataItem valueForAttribute:NSMetadataUbiquitousItemPercentDownloadedKey]; 
    NSLog(@"download status: %@", downloadProgress); 
+0

顯示您開發的代碼。 – Apurv

回答

1

相反輪詢NSMetadataItem更改的,你應該只聽從NSMetadataQuery更新和獲取NSMetadataUbiquitousItemPercentDownloadedKey一次(和更新UI)每次收到的更新時間。

(I 認爲現有的NSMetadataItem對象在下載過程中不會更新,除非從下載過渡到完全下載)。

這裏是聽使用KVO NSMetadataQuery更新的方式:

// To register for KVO updates: 
[query addObserver:self 
     forKeyPath:@"results" 
      options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld 
      context:nil]; 

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 
    // check that "object" is your metadata query then: 
    NSUInteger changeKind = [[change objectForKey:NSKeyValueChangeKindKey] unsignedIntegerValue]; 

    switch (changeKind) { 
     case NSKeyValueChangeSetting: 
      // The whole array of results changed, update your model accordingly 
      // ... 
      break; 
     case NSKeyValueChangeReplacement: 
      // This is where you update your progress bar in most cases 
      // Enumerate [change objectForKey:NSKeyValueChangeNewKey], this is a list of NSMetadataItems that will have all the desired properties 
      break; 
     case NSKeyValueChangeInsertion: 
      // Handle a new document 
      // ... 
      break; 
     case NSKeyValueChangeRemoval: 
      // Handle a removed document 
      // ... 
      break; 
    } 
} 

如果仍然看到沒有更新的進展,請提交錯誤報告與蘋果。

+0

現有的NSMetadataItem已更新。該項目下載後會出現下載進度鍵。原始查詢不會經常收到更新,足以更新進度欄。此外,在查詢更新中,沒有下載百分比鍵。 – Mark

+0

你如何傾聽NSMedataQuery的更新?使用KVO?根據我的經驗,我確實得到了足夠的進度條更新(大約十二秒)。 –

+0

托馬斯,你可以添加你的代碼到你的答案嗎?我只是每0.5秒輪詢元數據項目(就像開始測試一樣) – Mark