0

我的应用程序使用 UIDocument + iCloud 来创建和查看文档。文件以这种方式存储:

  • 文件/文件名.db
  • Documents/Filename.db/File.db(Filename.db是目录)

Documents/Filename.db 目录中的文件可以在其自己的视图控制器中正常加载。在另一个视图控制器中打开 Documents/Filename.db/File.db 时,我在加载这些文件时遇到问题。文件名不是固定的,并且会多次出现。我可以验证文件是否存储在目录中,所以这不应该是问题。

我想我已经找到了 NSMetadataQuery 的问题,因为它只在 Documents/ 内搜索 -我希望它在 Documents/Filename.db 目录内搜索。我尝试将查询 serachScope 设置为正确的路径,但似乎我需要使用 NSMetadataQueryUbiquityContainerDocumentsScope 进行搜索以返回结果。

- (NSMetadataQuery *)documentQuery 
{
NSMetadataQuery *query = [[NSMetadataQuery alloc] init];

NSString *appending = [NSString stringWithFormat:@"Documents/%@.db/", currentDirectory]; // Directory name
NSURL *documentPath = [[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil] URLByAppendingPathComponent:appending];
NSLog(@"Document Path: %@", documentPath);

if (query) {

    [query setSearchScopes:[NSArray arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]];

    NSString *filePattern = [NSString stringWithFormat:@"*.%@", STACK_EXTENSION];
    [query setPredicate:[NSPredicate predicateWithFormat:@"%K LIKE %@", NSMetadataItemFSNameKey, filePattern]];

}

return query;

}

- (void)processiCloudFiles:(NSNotification *)notification
{
[_query disableUpdates];
[_iCloudURLs removeAllObjects];

NSArray *queryResults = [_query results];
for (NSMetadataItem *result in queryResults) {

    NSURL *fileURL = [result valueForAttribute:NSMetadataItemURLKey];

    NSLog(@"---- FileURL: %@", fileURL);

    NSNumber *aBool = nil;

    [fileURL getResourceValue:&aBool forKey:NSURLIsHiddenKey error:nil];
    if (aBool && ![aBool boolValue]) {
        NSLog(@"Adding following Stack: %@", fileURL);
        [_iCloudURLs addObject:fileURL];

    }

}

NSLog(@"Found %d iCloud files", _iCloudURLs.count);
NSLog(@"iCloud URLs: %@", _iCloudURLs);

...

}
4

1 回答 1

0

我不确定为什么你的目录有一个 .db 扩展名,我可能不理解你的问题的全部含义,但是当我询问在 iCloud 存储的 ubiquity 容器中使用子目录时,我被一个我认为是苹果的人告诉我工程师可以添加子目录,但“任何目录都不应该有 . 在他们的名字中,否则它们可能会被视为一个包,这对你来说会很遗憾。你也不应该在容器的顶层放置任何 .nosync 条目。 " 他还说“设置会将文档显示为平面层次结构(例如,它只会显示文件和包,而不是目录),其他 UI 区域也可能会在视觉上忽略子目录。”

为了从目录的主表中选择子目录中的文件的详细表,我采用了一种方法来遍历查询中的所有项目并仅查找在 URL 中具有子目录的项目。

于 2013-05-02T01:02:31.980 回答