CoreStore refetch断言NSFetchRequest问题

时间:2019-08-15 14:53:05

标签: ios swift nsfetchedresultscontroller nsfetchrequest corestore

如果我很清楚,搜索某些内容时需要重新获取监视器:

我具有使用提供的字符串进行重新提取的功能

func search(searchText: String) {
        self.monitor.refetch(.where(format: "%K CONTAINS[cd] %@", #keyPath(ListEntityType.name), searchText),
                             OrderBy<ListEntityType>(.ascending("name")))
    }

但是此代码不可编译,仅以下代码可编译:

func search(searchText: String) {
        self.monitor.refetch(Where<ListEntityType>("name", isEqualTo: searchText),
                             OrderBy<ListEntityType>(.ascending("name")))
    }

但这只是等号,但我不仅需要搜索整个单词,还需要使用format: "%K CONTAINS[cd] %@

来搜索子字符串。

在CoreStore中,这是函数重新获取的样子:

 public func refetch(_ fetchClauses: [FetchClause]) {

        self.refetch { (fetchRequest) in

            fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
        }
    }

public protocol FetchClause {

    func applyToFetchRequest<T>(_ fetchRequest: NSFetchRequest<T>)
}

1 个答案:

答案 0 :(得分:1)

只需替换一下:

.where(format: "%K CONTAINS[cd] %@", #keyPath(ListEntityType.name), searchText)

使用

Where<ListEntityType>("%K CONTAINS[cd] %@", #keyPath(ListEntityType.name), searchText)

另一种语法糖:您可以摆脱#keyPath引用,而改用\ ListEntityType.name