![](/img/trans.png)
[英]How to insert an array into an existing NSMutableArray at a specific index
[英]How to insert an object at a specific index in a Realm array?
在Realm的GroupedTableView示例提供的示例之后,我构造了2D数组数据模型。 但是,我试图实现该功能来对我的taskByPriority数组中的任务进行重新排序,并且不确定如何在特定数组中插入。 目前,Realm Results数组按dateCreated排序,我只知道如何在Realm对象的末尾而不是在特定索引处向Realm添加新任务。
import UIKit
import MGSwipeTableCell
import RealmSwift
import Realm
import AEAccordion
class TasksTableViewController: UITableViewController {
var realm: Realm!
var notificationToken: NotificationToken?
var priorityIndexes = [0, 1, 2, 3]
var priorityTitles = ["Urgent | Important", "Urgent | Not Important", "Not Urgent | Important", "Not Urgent | Not Important"]
var tasksByPriority = [Results<Task>]()
override func viewDidLoad() {
super.viewDidLoad()
realm = try! Realm()
notificationToken = realm.addNotificationBlock { [unowned self] note, realm in
self.tableView.reloadData()
}
for priority in priorityIndexes {
let unsortedObjects = realm.objects(Task.self).filter("priorityIndex == \(priority)")
let sortedObjects = unsortedObjects.sorted("dateCreated", ascending: true)
tasksByPriority.append(sortedObjects)
}
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return priorityIndexes.count
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return Int(tasksByPriority[section].count)
}
override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return priorityTitles[section]
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("taskTableViewCell", forIndexPath: indexPath) as! TaskTableViewCell
// Configure the cell...
let task = self.taskForIndexPath(indexPath)
//configure right buttons
cell.rightButtons = [MGSwipeButton(title: "", icon: UIImage(named:"deleteTask.png"), backgroundColor: UIColor(red: 0, green: 0, blue: 0, alpha: 0), callback: {
(sender: MGSwipeTableCell!) -> Bool in
RealmHelper.deleteTask(self.taskForIndexPath(indexPath)!)
return true
})]
return cell
}
func taskForIndexPath(indexPath: NSIndexPath) -> Task? {
return tasksByPriority[indexPath.section][indexPath.row]
}
// MARK: Segues
@IBAction func unwindToTasksTableViewController(sender: UIStoryboardSegue) {
if let sourceViewController = sender.sourceViewController as? DisplayTaskViewController, task = sourceViewController.task, priorityIndex = sourceViewController.priorityIndex {
if let selectedIndexPath = tableView.indexPathForSelectedRow {
// Update an existing task.
if selectedIndexPath.section == priorityIndex { // not changing priority
RealmHelper.updateTask(taskForIndexPath(selectedIndexPath)!, newTask: task)
}
else { // changing priority
RealmHelper.addTask(task)
RealmHelper.deleteTask(taskForIndexPath(selectedIndexPath)!)
}
}
else {
RealmHelper.addTask(task)
}
}
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let identifier = segue.identifier {
if identifier == "editTaskDetailsSegue" {
let displayTaskViewController = segue.destinationViewController as! DisplayTaskViewController
// set task of DisplayTaskViewController to task tapped on
if let selectedTaskCell = sender as? TaskTableViewCell {
let indexPath = tableView.indexPathForCell(selectedTaskCell)!
let selectedTask = taskForIndexPath(indexPath)
displayTaskViewController.task = selectedTask
print("Task completed: \(selectedTask!.completed)")
displayTaskViewController.priorityIndex = indexPath.section
displayTaskViewController.completed = (selectedTask?.completed)!
}
}
else if identifier == "addNewTaskSegue" {
}
}
}
}
领域助手类
import Foundation
import RealmSwift
class RealmHelper {
static func addTask(task: Task) {
let realm = try! Realm()
try! realm.write() {
realm.add(task)
}
}
static func deleteTask(task: Task) {
let realm = try! Realm()
try! realm.write() {
realm.delete(task)
}
}
static func updateTask(taskToBeUpdated: Task, newTask: Task) {
let realm = try! Realm()
try! realm.write() {
taskToBeUpdated.text = newTask.text
taskToBeUpdated.details = newTask.details
taskToBeUpdated.dueDate = newTask.dueDate
taskToBeUpdated.completed = newTask.completed
}
}
}
TL; DR
Realm中的对象是无序的。 如果确实要对对象进行排序,则可以使用List<T>
类型。 可以对List
进行突变,可以insert(_:atIndex:)
, removeAtIndex(_:)
等。 这是“ 列表类参考” ,您可以在其中找到如何使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.