【问题标题】:Insert new row on top of table view with CoreData使用 CoreData 在表格视图顶部插入新行
【发布时间】:2019-12-05 15:30:48
【问题描述】:

我想使用 CoreData 制作一个应用程序。 我制作了表格视图并添加了视图控制器以将数据添加到 Core Data 和表格视图以检索数据,一切正常。但是当我从添加视图控制器插入一个新行到表视图时,它将进入表视图的底部。我想让它插入表格视图的顶部。我尝试了来自 Internet 的不同代码,但没有一个适用于我的代码。

这是表视图控制器:

var List: [NSManagedObject] = []

override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = .white
    // Configure Table View...
    tableView.separatorColor = .clear
}

override func viewDidAppear(_ animated: Bool) {
    let application: AppDelegate = UIApplication.shared.delegate as! AppDelegate
    let context = application.persistentContainer.viewContext
    let get = NSFetchRequest<NSManagedObject>(entityName: "Entity")
    List = try! context.fetch(get)
    tableView.reloadData()
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return List.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "MainCell", for: indexPath) as! MainTableViewCell
    let data: NSManagedObject = List[indexPath.row]
    cell.objectName.text = data.value(forKey: "objectName") as? String
    cell.objectPlace.text = data.value(forKey: "placeName") as? String
    return cell
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 180
}

【问题讨论】:

  • 您想先显示最后添加的项目,最后显示第一个添加的项目吗?
  • 当我添加一个项目时,将该项目显示在表格视图的顶部
  • 非常感谢它的工作dd.. :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :)

标签: ios swift uitableview core-data


【解决方案1】:

默认情况下,核心数据对象是按照它们插入的顺序获取的。要首先显示最后添加的对象,只需反转获取的数组即可。

override func viewDidAppear(_ animated: Bool) {
  guard let application = UIApplication.shared.delegate as? AppDelegate else {
    return
  }
  let context = application.persistentContainer.viewContext
  let get = NSFetchRequest<NSManagedObject>(entityName: "Entity")
  do {
    List = try context.fetch(get).reversed()
    tableView.reloadData()
  } catch let error as NSError {
    print(error.userInfo)
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    相关资源
    最近更新 更多