OS X的Search Kit Framework允許創建和訪問搜索索引。但是,如果該索引的名稱未知,則無法訪問現有的搜索索引。可用於訪問現有搜索索引(SKIndexOpenWithData,SKIndexOpenWithMutableData,SKIndexOpenWithURL)的框架的所有功能都要求索引名稱。這與存儲搜索索引數據的文件的文件名不同。在不知道名稱的情況下打開現有的搜索工具包框架搜索索引
當我嘗試通過在不知道索引名稱的情況下調用SKIndexOpenWithURL來訪問現有的搜索索引文件時,該函數不會返回有效的SKIndexRef。將NULL作爲索引名稱(如框架文檔中所建議的)不起作用,因爲Search Kit Framework只會嘗試使用索引名稱'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!");
然而,搜索索引的名字無疑是該索引文件中。是否有人知道如何在不知道搜索索引名稱的情況下檢索該名稱或以其他方式訪問搜索索引文件的方式?我知道,根據框架文檔,不可能使用框架來獲取該索引名稱,但它應該是可能的。
這很激烈。工作很好。你絕對需要索引名稱來訪問索引?您可能會向Apple提交錯誤報告。我從來沒有在文檔中找到任何說你需要索引名稱來訪問索引的東西。 – Philip
謝謝!我已經提交了一個針對文檔的bug - 在SKIndexCreateWithData和SKIndexCreateWithMutableData中,您需要知道索引名稱(如果它不是默認名稱),但是SKIndexOpenWithURL函數缺少這個名稱。我試圖訪問不使用默認索引名稱的第三方索引文件。 – Tim