如何使用 NSSet 填充 tableView? (迅速)

Posted

技术标签:

【中文标题】如何使用 NSSet 填充 tableView? (迅速)【英文标题】:How can I populate a tableView with an NSSet? (swift) 【发布时间】:2015-05-29 21:08:08 【问题描述】:

我在 tableView1 中有一个 Person 类,然后在 TableView2 中,用户添加品牌以与该人关联。我的获取请求试图取回他们选择的人并使用该人的相关品牌填充 tableView 的行,但我被困在这里:

 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
        let cell = tableView.dequeueReusableCellWithIdentifier(Storyboard.CellReuseIdentifier, forIndexPath: indexPath) as! UITableViewCell

        let brandSetAllObjects = brandSet?.allObjects


        let brand = brandSetAllObjects as? Brand[indexPath.row]
        cell.textLabel!.text = brand.valueForKey("name") as? String


        return cell
    

获取:

 //Helper Function to Fetch Core Data
    func fetchCoreData() 
        //1
        let appDelegate =
        UIApplication.sharedApplication().delegate as! AppDelegate

        let managedContext = appDelegate.managedObjectContext!

        //2
        let fetchRequest = NSFetchRequest(entityName:"Person")


        //3
        var error: NSError?

        let fetchedResults =
        managedContext.executeFetchRequest(fetchRequest,
            error: &error) as? [NSManagedObject]

        if let results = fetchedResults as? [Person] 
            for selectedPerson in results 
                brandSet = selectedPerson.brands
                println(brandSet)
            

         else 
            println("Could not fetch \(error), \(error!.userInfo)")
        

类:

import Foundation
import CoreData

class Brand: NSManagedObject 

    @NSManaged var name: String
    @NSManaged var people: NSSet




import Foundation
import CoreData

class Person: NSManagedObject 

    @NSManaged var name: String
    @NSManaged var brands: NSSet

    func addBrandsObject(value: Brand) 
        self.mutableSetValueForKey("brands").addObject(value)
    


【问题讨论】:

这行代码让我有点困惑,你能详细说明一下吗 - let brand = brandSetAllObjects as? Brand[indexPath.row] 有人在较早的答案中建议通过 .allObjects 将 NSSet 放入一个数组中......所以我试图将该数组转换为(不成功)我可以用来填充我的 tableView 的东西跨度> 【参考方案1】:

是否存在您希望表格视图内容显示的特定可排序顺序?

您可以拥有一个以统一方式处理数据的数据管理器,而不是直接访问数据结构“Brand”。您可以将所有Brand 信息保存在NSSet 中,然后在数据管理器上设置一个方法,该方法返回NSArray(可能称为brandArray)。数据管理器可以获取NSSet 的内容,将它们添加到一个数组中,然后对数组进行排序,使它们具有统一的顺序并返回该数组。

UITableView 一侧,只需将Brand[indexPath.row] 替换为dataManager.brandArray[indexPath.row]

我对数据管理器的建议是创建一个将作为singleton 实现的类。 this tutorial 的第 4 步很好地解释了如何设置数据管理器。

旁注:数据管理器只是一个概念,而不是严格的类或对象类型。它可以是任何管理数据的对象,尽管这通常作为可以从项目中的任何其他类访问的单例执行。

【讨论】:

关于如何设置数据管理器有什么建议吗?我找不到任何文档或教程... 我更新了我的答案,提供了如何制作单例以及如何制作数据管理器的链接。我希望这会有所帮助!

以上是关于如何使用 NSSet 填充 tableView? (迅速)的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSSet 关系填充 cellForRow

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

如何在 Swift 中将 NSSet 转换为 NSMutableSet

用 CoreData 对象填充 NSSet

当在 tableview 之外触摸时。如何关闭 tableView? [复制]

如何使用 json 而不是 plist 来填充 TableView