如何使用NSSet填充tableView?(Swift)

3

我在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] - Unheilig
在以前的答案中,有人建议通过.allObjects将NSSet转换为数组...所以我试图将该数组强制转换为我可以使用的东西来填充我的tableView,但是没有成功。 - GarySabo
1个回答

1

你想要在表格视图中展示的内容按照特定的顺序进行排序吗?

你可以创建一个数据管理器来统一操作数据,而不是直接访问数据结构“Brand”。你可以将所有Brand信息存储在一个NSSet中,然后在你的数据管理器上编写一个方法,返回一个NSArray(可能称为brandArray)。数据管理器可以获取NSSet的内容,将它们添加到一个数组中,然后对数组进行排序,以便它们按照统一的顺序排列并返回该数组。

UITableView方面,只需将Brand[indexPath.row]替换为类似于dataManager.brandArray[indexPath.row]的内容即可。

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

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


有关如何设置数据管理器的建议吗?我找不到任何文档或教程... - GarySabo
我更新了我的答案,并附上了如何创建单例和数据管理器的链接。希望这有所帮助! - Fennelouski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接