从NSSet获取对象并填充TableView

时间:2017-01-09 09:07:54

标签: ios uitableview core-data

我有这段代码如下所示

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关系从指定的List中获取Items,并将所有项保存到NSSet中。

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

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

P.S。 .contains关系的类型为NSSet

    @NSManaged public var contains: NSSet?

1 个答案:

答案 0 :(得分: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