OS X 的Search Kit Framework允许创建和访问搜索索引。但是,如果该索引的名称未知,则无法访问现有的搜索索引。可用于访问现有搜索索引的框架的所有功能(SKIndexOpenWithData、SKIndexOpenWithMutableData、SKIndexOpenWithURL)都要求提供索引名称。这与存储搜索索引数据的文件的文件名不同。
当我尝试在不知道索引名称的情况下调用 SKIndexOpenWithURL 来访问现有搜索索引文件时,该函数不会返回有效的 SKIndexRef。将 NULL 作为索引名称传递(如框架文档所建议的那样)不起作用,因为 Search Kit 框架仅尝试使用索引名称“IADefaultIndex”。
例如,如果我创建一个索引名称如下的索引文件:
NSString *path = @"/Users/Tim/Desktop/searchindex.skindex";
NSURL *url = [NSURL fileURLWithPath: path];
NSString *name = @"myIndex";
SKIndexType type = kSKIndexInverted;
SKIndexRef skIndex;
skIndex = SKIndexCreateWithURL ((__bridge CFURLRef)url, (__bridge CFStringRef)name, (SKIndexType)type, (CFDictionaryRef)NULL);
// ..
如果我知道索引名称“myIndex”,我以后只能打开文件并访问存储的索引。如果我尝试在没有(或不知道)索引名称的情况下打开文件,则以下代码示例将失败:
NSURL *skURL = [NSURL fileURLWithPath:@"/Users/Tim/Desktop/searchindex.skindex"];
SKIndexRef skIndex;
skIndex = SKIndexOpenWithURL((__bridge CFURLRef)skURL, NULL, true);
if (!skIndex) NSLog (@"couldn't open index!");
但是,搜索索引的名称肯定在该索引文件中。有人知道在不知道搜索索引名称的情况下检索该名称或以其他方式访问搜索索引文件的方法吗?我知道根据框架文档,不可能使用框架来获取该索引名称,但它仍然应该是可能的。