代码之家  ›  专栏  ›  技术社区  ›  Era

SearchKit迭代器不工作

  •  0
  • Era  · 技术社区  · 8 年前

    我为核心数据实体编制索引,如下所示:

    func index(object: SearchIndexable) throws -> Bool {
        guard let entry = NSEntityDescription.insertNewObject(forEntityName: "IndexableEntry", into: context) as? IndexableEntry else {
            return false
        }
    
        entry.key = object.key
        entry.value = object.value
    
        try context.save()
    
        let url = entry.objectID.uriRepresentation()
    
        print("URL: \(url)")
    
        guard let doc = SKDocumentCreateWithURL(url as CFURL)?.takeRetainedValue() else {
            return false
        }
    
        let text = object.indexableText.joined(separator: " ")
    
        return SKIndexAddDocumentWithText(index, doc, text as CFString, true)
    }
    

    稍后,我需要枚举每个索引文档

    func enumerateDocuments(_ block: (SearchQueryResult) -> Void) {
        guard let iterator = SKIndexDocumentIteratorCreate(index, nil)?.takeRetainedValue() else {
            return
        }
    
        while let doc = SKIndexDocumentIteratorCopyNext(iterator)?.takeRetainedValue() {
            guard let url = SKDocumentCopyURL(doc)?.takeRetainedValue() else {
                continue
            }
    
            print("ENUM-URL: \(url)")
    
        /// ...
    }
    

    当我索引3个文档,然后刷新索引并尝试枚举时,生成的日志输出如下

    URL: x-coredata://C12FF498-4FAA-4158-95B4-C9214FD7F85A/IndexableEntry/p1
    URL: x-coredata://C12FF498-4FAA-4158-95B4-C9214FD7F85A/IndexableEntry/p2
    URL: x-coredata://C12FF498-4FAA-4158-95B4-C9214FD7F85A/IndexableEntry/p3
    ENUM-URL: x-coredata://C12FF498-4FAA-4158-95B4-C9214FD7F85A
    

    为什么枚举器会从原始URL中删除实体名称和实例?

    0 回复  |  直到 8 年前
    推荐文章