2014-03-19 91 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