OS Xの検索キットフレームワークを使用すると、検索インデックスを作成してアクセスできます。ただし、既存の検索インデックスの名前が不明な場合、そのインデックスにアクセスすることはできません。既存の検索インデックス(SKIndexOpenWithData、SKIndexOpenWithMutableData、SKIndexOpenWithURL)にアクセスするために使用できるフレームワークのすべての関数は、インデックス名を要求します。これは、検索インデックスデータが保存されているファイルのファイル名と同じではありません。
インデックスの名前を知らずにSKIndexOpenWithURLを呼び出して既存の検索インデックスファイルにアクセスしようとすると、関数は有効なSKIndexRefを返しません。Search Kit Frameworkは「IADefaultIndex」のインデックス名のみを使用しようとするため、(フレームワークのドキュメントで提案されているように)インデックス名としてNULLを渡すことは機能しません。
例として、次のようなインデックス名でインデックスファイルを作成するとします。
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!");
ただし、検索インデックスの名前は確かにそのインデックスファイル内にあります。その名前を取得する方法や、検索インデックス名を知らなくても検索インデックスファイルにアクセスする方法を知っている人はいますか?フレームワークのドキュメントによると、フレームワークを使用してそのインデックス名を取得する可能性はないことは承知していますが、それでも可能であるはずです。