什么是键,我如何使用它们?

时间:2012-07-03 16:52:09

标签: iphone objective-c ios ipad nsurl

我正在研究iCloud兼容的应用程序,我正在研究如何检测文件是上传/下载还是已完成。 我发现可以使用NSURL“密钥”检测到这一点,例如NSURLUbiquitousItemIsDownloadingKeyNSURLUbiquitousItemIsUploadingKey。我还在努力学习编程,那么这些键是什么?如何使用它们来检测文件的状态(我希望应用程序知道文件何时完成上传到iCloud或完成下载(无论设备在哪一侧)。

我读到我可以使用resourceValuesForKeys:error:来查询这些键的状态,所以我会将它放入IF语句并查看结果是否是预期的,例如“是”还是“否”?谢谢你的帮助。

if ([destination resourceValuesForKeys:[NSArray arrayWithObject:NSURLUbiquitousItemIsUploadingKey] error:NULL]) {

    //is uploading??

}

1 个答案:

答案 0 :(得分:1)

您提出的代码看起来几乎可行,但是一方面:resourceValuesForKeys:error:返回一个字典,其字符与您传入的常量相同,其值与the documentation for those keys中指定的值相同。对于NSURLUbiquitousItemIsUploadingKey,值为NSNumber实例,其中包含BOOL值。

所以......假设destinationNSURL指向您普遍存在的容器中的项目:

NSError *error;
NSArray *keys = [NSArray arrayWithObject:NSURLUbiquitousItemIsUploadingKey];
NSDictionary *values = [destination resourceValuesForKeys:keys error:&error];
if (values == nil)
    NSLog(@"error: %@", error);
else if ([[values objectForKey:NSURLUbiquitousItemIsUploadingKey] boolValue])
    NSLog(@"uploading");
else
    NSLog(@"not uploading");

如果您只查询一个密钥,则可以使用getResourceValue:forKey:error:更简洁。