【问题标题】:UITableView filtered data has incorrect indexUITableView 过滤后的数据索引不正确
【发布时间】:2015-10-01 14:20:23
【问题描述】:

这是我从 CoreData 过滤数据的代码,它提供了更正的数据,但如果我查看记录的详细信息,它会给我错误的数据。

意思是我有详细的 VC,可以显示更大的相机图像。因此,如果索引是过滤器数据的 1,但索引 1 中相机的实际索引在 CoreData 中实际上是 20。我该如何纠正这个问题?

func fetch() {
    let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    // Ref data
    let context: NSManagedObjectContext = appDel.managedObjectContext!
    let freq = NSFetchRequest(entityName: "Cameras")
    let predicate = NSPredicate(format: "locationname == %@", "lobby")
    freq.predicate = predicate
    let fetchResults = try! context.executeFetchRequest(freq) as? [NSManagedObject]
    filteredData.removeAll(keepCapacity: false)
    filteredData = fetchResults!
    searchActive = true;
}

更新
请求更新信息。

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if searchActive {
        return filteredData.count
    } else {
    return myData.count
    }
}

下一项。

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cameraCell", forIndexPath: indexPath) as! camerasTableViewCell
    if searchActive {
    let data = filteredData[indexPath.row]
    cell.nameLabel.text =  data.valueForKey("name") as? String
    cell.roadName.text = data.valueForKey("locationname") as? String
    let CamImage =  data.valueForKey("dImage") as! NSData
    let CameraImage: UIImage = UIImage(data: CamImage)!
    cell.imageUrl?.image = CameraImage
    } else {
        let data = myData[indexPath.row]
        cell.nameLabel.text =  data.valueForKey("name") as? String
        cell.roadName.text = data.valueForKey("locationname") as? String
        let CamImage =  data.valueForKey("dImage") as! NSData
        let CameraImage: UIImage = UIImage(data: CamImage)!
        cell.imageUrl?.image = CameraImage
    }
    return cell
}

下一项

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let selectedIndexPath:NSIndexPath = self.tableView.indexPathForSelectedRow!

    let vc = segue.destinationViewController as! largeCameraViewController
    vc.row = selectedIndexPath.row

}

【问题讨论】:

  • 请您发布您的表格视图数据源方法(特别是numberOfRowsInSectioncellForRowAtIndexPath)以及向详细VC 展示/连接的代码。听起来您需要修改present/segue 代码以使用filteredData(如果searchActive 为true)来定位要传递的正确对象。

标签: ios uitableview core-data swift2


【解决方案1】:

您应该在prepareForSegue 中传递对象本身,而不是行。将属性添加到您的 LargeCameraViewController

var camera : NSManagedObject?

然后在prepareForSegue中,根据searchActive是真还是假,从filteredDatamyData的相关行中获取camera

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let selectedIndexPath:NSIndexPath = self.tableView.indexPathForSelectedRow!
    let vc = segue.destinationViewController as! largeCameraViewController
    if (searchActive) {
        vc.camera = filteredData[selectedIndexPath.row] as! NSManagedObject
    } else {
        vc.camera = myData[selectedIndexPath.row] as! NSManagedObject
    }
}

然后在LargeCameraViewController 中,您可以从camera NSManagedObject 访问相关属性。

【讨论】:

  • 非常感谢,几个月来我一直在为如何让搜索栏和过滤数据正常工作而苦苦挣扎!!!
猜你喜欢
  • 1970-01-01
  • 2021-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
相关资源
最近更新 更多