我有这段代码如下所示
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?
最佳答案
为什么不使用 Set 转换为 Array,
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
关于ios - 从 NSSet 获取对象并填充 TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41544403/