从 NSSet 获取对象并填充 TableView

Posted

技术标签:

【中文标题】从 NSSet 获取对象并填充 TableView【英文标题】:Getting objects from NSSet and populating TableView 【发布时间】:2017-01-09 09:07:53 【问题描述】:

我有这段代码如下图

func getItemsOnList()

    let app = UIApplication.shared.delegate as! AppDelegate
    let context = app.persistentContainer.viewContext

    //fetchRequest to get the List
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "List")
    let predicate = NSPredicate(format: "title == %@", listName)
    fetchRequest.returnsObjectsAsFaults = false
    fetchRequest.predicate = predicate

    if let fetchResults = try? context.fetch(fetchRequest)
        if fetchResults.count > 0 
            for listEntity in fetchResults 
                let list = listEntity as! List
                print(list.title as Any)
                itemsOnListSet = list.contains!

它的作用是使用两个实体之间的 .contains 关系从指定的列表中获取项目,并将所有项目保存到 NSSet 中。

我想做的是用 NSSet 中的对象填充 TableView。

是否有与 NSSet 相关的函数允许我从集合中获取项目?或者我应该将项目保存在数组而不是 NSSet 中。

附: .contains 关系的类型是 NSSet

    @NSManaged public var contains: NSSet?

【问题讨论】:

NSSet 是没有索引的数组,不能作为数据源tableview使用,一般用于搜索/过滤,不能包含重复项 【参考方案1】:

为什么不使用,将 Set 转换为数组,

if let _ = list.contains 
    let itemsOnListArray = list.contains!.allObjects 

否则

if let unwrappedList = list.contains 
        let itemsOnListArray = unwrappedList.allObjects 

现在使用您的 itemsOnListArray 作为 tableView 的数据源:)

编辑:

你的代码

let item = itemsOnListArray[indexPath.row] 
cell.textLabel?.text = item as? String

假设 itemsOnListArray 是一个字符串数组!!!这是绝对不可能的,因为list.contains! 是一组 NSManagedObjects,或者如果您创建了 ManagedObjects 的映射子类,那么它将包含一组您的托管对象,例如项目。

你应该做的是(因为你没有提供项目的描述我假设项目中有一个名称属性)

let item = itemsOnListArray[indexPath.row] as! Item
cell.textLabel?.text = item.name

【讨论】:

let itemsOnListArray = itemsOnListSet.allObjects let item = itemsOnListArray[indexPath.row] cell.textLabel?.text = item as? String print(itemsOnListArray)`返回单元格` 我做了类似的事情,但 tableView 上没有显示任何内容 tableView 条目是正确的。它在 tableview 上放置了适量的单元格,但没有任何价值。

以上是关于从 NSSet 获取对象并填充 TableView的主要内容,如果未能解决你的问题,请参考以下文章

用 CoreData 对象填充 NSSet

获取 JSON 数据以从数组中填充 TableView

在 iOS 中获取 JSON 数据并填充 TableView

TableView,以正确的顺序显示来自核心数据 NSSet 的记录

填充 TableView 中的 JSON 数组和 CoreData

从 Firebase 下载 json 并填充 TableView Swift 3