如何让Spotlight属性显示在获取信息窗口中?

时间:2010-05-15 18:59:37

标签: cocoa spotlight

我为漫画文件创建了一个聚光灯导入器。属性已成功导入和搜索。剩下的一件事就是让属性显示在文件的获取信息窗口中。

似乎这应该是编辑schema.xml文件的简单问题,因此属性嵌套在displayattrs标记内。不幸的是,这似乎不起作用。

我简化了测试插件。以下是所有重要文件。

schema.xml中

<types>
<type name="cx.c3.cbz-archive">  
    <allattrs>
        kMDItemTitle
        kMDItemAuthors
    </allattrs>
    <displayattrs>
        kMDItemTitle
        kMDItemAuthors
    </displayattrs>
    </type>
<type name="cx.c3.cbr-archive">  
    <allattrs>
        kMDItemTitle
        kMDItemAuthors
        </allattrs>
    <displayattrs>
        kMDItemTitle
        kMDItemAuthors
    </displayattrs>
</type>
</types>

GetMetadataForFile.m

Boolean GetMetadataForFile(void* thisInterface, 
                       CFMutableDictionaryRef attributes, 
                       CFStringRef contentTypeUTI,
                       CFStringRef pathToFile)
{
    NSAutoreleasePool * pool = [NSAutoreleasePool new];
    NSString * file = (NSString *)pathToFile;
    NSArray * authors = [[UKXattrMetadataStore stringForKey: @"com_opencomics_authors" atPath: file traverseLink: NO] componentsSeparatedByString: @","];
    [(NSMutableDictionary *)attributes setObject: authors forKey: (id)kMDItemAuthors];
    NSString * title = [UKXattrMetadataStore stringForKey: @"com_opencomics_title" atPath: file traverseLink: NO];
    [(NSMutableDictionary *)attributes setObject: title forKey: (id)kMDItemTitle];
    [pool release];
    return true;
}

2 个答案:

答案 0 :(得分:1)

您似乎错过了</types>标记。在写这个问题时复制/粘贴错误,或者XML文件中是否也缺少这个错误?

如果文件中缺少,则XML无效。

答案 1 :(得分:0)

您的插件文件夹结构是什么样的?

它应该是这样的(取自 QuartzComposer ),以便Spotlight导入程序进程找到并处理 schema.xml

Contents
   Info.plist
   MacOS
      QuartzComposer
   Resources
      schema.xml
   version.plist