- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在努力添加 icloud到我的项目(这对包子来说很痛苦)并且我能够保存和删除文件,但我无法获得存储在 iCloud 中的文件列表。我尝试了大约 10 个不同网站的解决方案(包括 Apple 文档)。每当我调用 [self.query startQuery];
时,一切似乎都在工作:正确的方法被调用,这些方法完全按照它们应该的方式执行。然后当我要求 nsarray在我的应用程序的 iCloud 文档目录中的文件中,我得到两个括号,它们之间没有任何内容(当我在 NSLog 中查看时):File List: ( )
。我知道在我的应用程序的 iCloud 文档目录中有许多不同的文档,各种形状、扩展名、大小和名称,因为我一直在使用 iCloud Developer网站检查一切是否正常。我设置查询的第一种方法如下:
- (void)syncWithCloud {
self.query = [[NSMetadataQuery alloc] init];
NSURL *mobileDocumentsDirectoryURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
[query setSearchScopes:[NSArray arrayWithObjects:NSMetadataQueryUbiquitousDocumentsScope, nil]];
//[query setPredicate:[NSPredicate predicateWithFormat:@"%K LIKE '*'", NSMetadataItemFSNameKey]];
[query setPredicate:[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%%K like \"%@*\"", [mobileDocumentsDirectoryURL path]], NSMetadataItemPathKey]];
//Pull a list of all the Documents in The Cloud
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(processFiles:)
name:NSMetadataQueryDidFinishGatheringNotification object:self.query];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(processFiles:)
name:NSMetadataQueryDidUpdateNotification object:self.query];
[self.query startQuery];
}
process files method接下来是 Apple 提供的:
- (void)processFiles:(NSNotification*)aNotification {
NSMutableArray *discoveredFiles = [NSMutableArray array];
//Always disable updates while processing results.
[query disableUpdates];
//The query reports all files found, every time.
NSArray *queryResults = [query results];
for (NSMetadataItem *result in queryResults) {
NSURL *fileURL = [result valueForAttribute:NSMetadataItemURLKey];
NSNumber *aBool = nil;
// Don't include hidden files.
[fileURL getResourceValue:&aBool forKey:NSURLIsHiddenKey error:nil];
if (aBool && ![aBool boolValue])
[discoveredFiles addObject:fileURL];
}
//Update the list of documents.
[FileList removeAllObjects];
[FileList addObjectsFromArray:discoveredFiles];
//[self.tableView reloadData];
//Reenable query updates.
[query enableUpdates];
NSLog(@"File List: %@", FileList);
}
为什么这不给我文件列表或至少某种数据?我是否定义了 NSMetadata 查询错误,也许我的谓词格式不正确?我知道我做错了什么,因为 iCloud 不可能这么复杂(或者可以吗?)。
提前感谢您的帮助!
编辑 #1:我正在继续尝试不同的方法来解决这个问题。使用下面的答案之一,我更改了谓词过滤器,如下所示:
[query setPredicate:[NSPredicate predicateWithFormat:@"NSMetadataItemFSNameKey LIKE '*'"]];
我还在 [query enableUpdates]
调用之前添加了以下几行:
for (NSMetadataItem *item in query.results) {
[FileList addObject:[item valueForAttribute:NSMetadataItemFSNameKey]];
}
在 processFiles
方法中,我尝试将所有代码放在后台线程上,但这没有任何区别 - 事实上,当代码不在后台执行时thread FileList
给我这个 (null)
而不是这个 ( )
。
我的问题可能与线程管理或内存分配有关吗?请注意,我使用的是 ARC。
编辑 #2:FileList
变量是在我的@interface
中定义并在-(id) 中初始化的 NSMutableArray init
方法,然后调用 processFiles
方法。
编辑 #3:当使用断点测试我的代码时,我发现以下 for-loop永远不会通过 - 一次都没有。这让我相信:
A. 没有连接到正确的目录
B. iCloud看不到目录下的文件
C. 我的 NSMetadataQuery 没有正确设置 D.完全不同的东西
这是启动永远不会运行的 for 循环的代码:
NSArray *queryResults = [query results];
for (NSMetadataItem *result in queryResults) {
最佳答案
由于您已经正确设置了搜索范围,因此无需在谓词中使用特殊过滤器。只需使用:
query.predicate = [NSPredicate predicateWithFormat:@"NSMetadataItemFSNameKey == '*'"];
并获取数组使用:
NSMutableArray *array = [NSMutableArray array];
for (NSMetadataItem *item in query.results) {
[array addObject:[item valueForAttribute:NSMetadataItemFSNameKey]];
}
关于objective-c - iCloud NSMetadata 查询结果为空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14114193/
我是 icloud 新手。我正在开发一个应用程序。在我的应用程序中,我想将图片备份到 iCloud 服务器。但我不想将这些图像传回我的 iPhone。 这可能吗?怎么可能呢。我是 iCloud 新手。
我对 iCloud 很陌生——我制作了一个容器,然后在其中创建了一个记录类型。然后部署到生产。 好吧,我不再想要这种记录类型,所以我尝试删除它。 Invalid attempt to delete a
我已经在 icloud 中复制了我的 sqlite 数据库,我想使用该 icloud sqlite 数据库作为插入/更新和删除。我为它编写了代码,但它在其他设备上不起作用(我有 2 个设备)。意味着当
当本地商店更改为 iCloud 商店时,我正在尝试接收消息。 这是一个关键事件。所以我的用例是一个新设备在从一个空的商店开始后接收 iCloud 商店。我想通知 View 更新接收到的内容。 我像这样
我试图让 iCloud 中的键值存储正常工作,但我遇到了一个奇怪的问题。 我使用以下方式存储数据: [[NSUbiquitousKeyValueStore defaultStore] setObjec
我遇到了有关 iCloud 同步过程的问题。 当用户决定激活 iCloud 时,本地存储在应用程序沙箱中的文档将移动到本地 iCloud 目录,然后删除沙箱中的文件。这是通过 setUbiquitou
我对 iCloud 的想法有点纠结,并发布了一个更一般的问题 here .我最大的问题是决定是否应该停止将用户数据放在应用程序沙箱中的旧文档文件夹中。为了说明我的问题: docs据我所知,不要给出答案
嗨,我开发了一个 iPhone 应用程序,我将 NSMutableArray 存储到 NSUserDefaults 中。但是现在我想将相同的 NSMutableArray/NSUserDefaults
有没有办法访问特定的 PHAsset在多个设备上唯一的 iCloud 相册中? 我编写了一个简单的应用程序,其中列出了缩略图和 .localIdentifier s 来自 iCloud 共享相册,并且
我正在尝试将应用程序转移到另一个 Apple ID。当我这样做时,我收到一条错误消息,指出该应用程序无法传输,因为该应用程序启用了 iCloud。 由于这不是故意的,我尝试禁用 iCloud 并向应用
我的 iPhone 应用程序的文档文件夹与文件应用程序上的 iCloud 位置存在问题。我的应用程序的文档文件夹出现在文件应用程序的设备端,但没有出现在文件应用程序的 iCloud 位置。iCloud
我一直在为客户运行一个流程,该流程涉及通过在 ruby 脚本中进行 https GET 调用,从 me.com 获取他们公开可用的日历文件,然后将 .ics 文件中的数据转换为 html,然后将其
我在 App Store 中有一个简单的应用程序,它是 UITableView由用户填写一些 UITextField 填充s 在模态调用的 View 中。用户按下保存,所有内容都保存到 Core Da
我有点困惑。每次用户单击“备份”时,我都使用 iCloud Drive 存储内部数据的备份。这不像我想的那样工作,因为有时它只是不会在设备和单击恢复的用户之间同步得到他们的旧备份。 现在我已经阅读了有
我有一个 iOS 应用程序,其中一半用户希望使用 iCloud 在设备之间同步一些数据,而另一半则不需要。出于这个原因,我将核心数据(启用 iCloud)的 sqlite 文件放在应用程序文档目录中。
我正在为 friend 的企业构建一个 i0S 8 iPad 应用程序,以帮助他和他的员工在设备之间同步评估数据。换句话说,如果一名员工创建了评估,则运行该应用程序的所有其他员工都应该可以访问该评估。
我正在创建一个应用程序(目前仅适用于 iPhone),它需要一种自动备份数据的方法,并让用户能够从不同的设备访问他们的数据。数据可能会在一段时间后达到一致的大小,因为它还将包括照片等。 我目前正在考虑
我非常接近在我的应用程序中完成 iCloud 和核心数据的实现。这是一款仅限 iOS 7 的应用程序。 我在应用程序中为用户提供一个选项,以 UISwitch 的形式说出打开或关闭 iCloud。该应
我正在开发一个使用核心数据的应用程序,因为我认为我可以使用核心数据为 iCloud 提供的同步功能在 iPad 和 iPhone 之间同步数据,现在它已被弃用。 我遇到了 CloudKit,但它主要用
应用程序在 iCloud 中存储数据似乎有几种不同的方式(iCloud Drive 文档、带 iCloud 同步的核心数据、CloudKit 私有(private)数据库、键值对等),但我不确定是否仅
我是一名优秀的程序员,十分优秀!