如何在 indexPath 的 cellForRow 中使用多个获取请求结果数组

Posted

技术标签:

【中文标题】如何在 indexPath 的 cellForRow 中使用多个获取请求结果数组【英文标题】:How to use multiple fetch request result arrays in cellForRow at indexPath 【发布时间】:2017-03-27 09:49:13 【问题描述】:

我不知道如何设置单元格的内容以显示来自多个实体对象实例的信息。在同一个单元格中,我需要显示 [Floors] 中的楼层号、[Rooms] 中的房间类型、传感器类型 [Alarms] 以及在同一阵列中找到的传感器状态。 首先,我对在 numberOfRowsInSection 函数中应该做什么感到困惑。要计算的数组是什么。 其次是索引路径函数处的行单元格。我再次需要获取正确数组的正确索引路径。我想这与实体之间的关系有关,但我不确定这是否是正确的方法。 有人可以花点时间帮助我吗?下面的代码清单和图片。谢谢你。

class InspectTheSystemTableVC: UITableViewController 

//MARK: - Properties

private var managedObjectContext: NSManagedObjectContext!

private var storedFloors = [Floors]()

private var storedRooms = [Rooms]()

private var storedAlarms = [Alarms]()

//MARK: - Actions

override func viewDidLoad() 
    super.viewDidLoad()
    managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    loadFloorData()




override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()


private func loadFloorData() 
    let floorRequest: NSFetchRequest<Floors> = Floors.fetchRequest()
    let roomsRequest: NSFetchRequest<Rooms> = Rooms.fetchRequest()
    let alarmRequest: NSFetchRequest<Alarms> = Alarms.fetchRequest()

    floorRequest.returnsObjectsAsFaults = false
    roomsRequest.returnsObjectsAsFaults = false
    alarmRequest.returnsObjectsAsFaults = false
    do 
        storedFloors = try managedObjectContext.fetch(floorRequest)
        storedRooms = try managedObjectContext.fetch(roomsRequest)
        storedAlarms = try managedObjectContext.fetch(alarmRequest)
    
    catch 
        print("could not load data from core \(error.localizedDescription)")
    



// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int 
    return 1


override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return 1



override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCell(withIdentifier: "system cell", for: indexPath) as! SystemCell

    return cell

【问题讨论】:

为所有不同类型创建不同的数据源,并在您在它们之间切换时重新加载表格视图。 谢谢您的回答,但请您说的更具体一点吗? 你能分享代码以便我更好地理解问题吗..? 3 个数组是否同步?我的意思是索引 0 处的数据是否与索引 0 处其他数组中的其他数据匹配?还是这 3 个数组有问题? 它们是同步的。我 【参考方案1】:
Create a Struct which holds the required  array values.

Eg . 
  Struct Entities     
    var room = Room()
    var floor = Floor()
    var alarm = Alarms()  
 

 var tableDataSource = [Entites]()

// Now add required data to entities array by iteration 

// tableDataSource count will be your number of rows in section count 

【讨论】:

以上是关于如何在 indexPath 的 cellForRow 中使用多个获取请求结果数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将 indexPath 数组拆分为单独的 indexPath 数组,每个数组的 indexPath 具有相同的 indexPath.section

如何获取 NSMutableArray 的 indexPath 值?

如何在 NSMutableArray 中存储 indexPath 时传入节值

如何安全地删除 indexPath 处的行

如何在Objective C中的didFinishLoading中获取IndexPath.row

如何在 alertview 上找到 indexpath?