如何使用 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? (迅速)的主要内容,如果未能解决你的问题,请参考以下文章
TableView,以正确的顺序显示来自核心数据 NSSet 的记录
如何在 Swift 中将 NSSet 转换为 NSMutableSet