【问题标题】:Swift - filter Realm objects via UISearchBar in a UICollectionViewSwift - 通过 UICollectionView 中的 UISearchBar 过滤领域对象
【发布时间】:2015-11-13 18:09:38
【问题描述】:

这是我的 Realm 对象,基本上是一个附加了一些标签的图像。

class AllTags: Object {
dynamic var singleTag = ""}

class Photo: Object {
var myTags: [String] {

    get {
        return _backingNewTags.map { $0.singleTag }
    }
    set {
        _backingNewTags.removeAll()
        _backingNewTags.appendContentsOf(newValue.map({ AllTags(value: [$0]) }))
    }
}

let _backingNewTags = List<AllTags>()

override static func ignoredProperties() -> [String] {
    return ["myTags"]
}

dynamic var imagePath = ""}

我有我的collectionView,我可以看到我所有的照片,按下图像时我可以看到我的标签,所以一切正常。 我添加了我的 UISearchBar,添加了 txtSearchbar.delegate = self 并使用 let data = realm.objects(AllTags).map { $0.singleTag } 我可以打印数据库中的所有标签。

我只需要在通过 UISearchBar 键入 CollectionView 单元格时实时过滤,因此它只显示带有我正在键入的单词标记的图像。基本的。

我一直在按照本教程在 collectionView 中进行过滤 - https://github.com/codepath/ios_guides/wiki/Search-Bar-Guide#example-searching-a-collection-view - 11 小时后,我无法弄清楚如何使其与 Realm 一起使用。使用像示例这样的硬编码数组,我可以让它工作。

【问题讨论】:

    标签: ios swift uicollectionview uisearchbar realm


    【解决方案1】:

    在 Realm 中,您可以根据要查找的内容过滤 Results&lt;T&gt;。例如:

    let data = realm.objects(AllTags).filter("singleTag CONTAINS %@", searchTerm)
    

    不过,我想知道,为什么要将 _backingNewTags 转换为数组 [String]?为什么不能直接访问标签?这将大大提高内存和 CPU 效率,并将简化您的代码...

    【讨论】:

    • 我对开发很陌生,我从教程中获取了这段代码。我在 Realm 中创建标签数组时遇到了问题,而这段代码至少可以工作。那么我应该在哪里使用你写的代码呢?在 searchBar 函数中?现在我正在使用一个超级复杂的代码来过滤并且有点工作,但我相信有一个更简单的方法来做到这一点
    • 是的,您将在搜索栏委托中应用对象提取和过滤,当搜索字符串发生更改时会收到通知,并且在我假设是呈现结果的表格视图中,您会从 Results&lt;T&gt; 获取计数,当获取 cellForRow... 时,您将返回具有从该索引处的 Realm 对象分配的属性的单元格。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    相关资源
    最近更新 更多