如何使用RLMArray保存一个数组

注意:对于Realm和Swift,我是相当新的,所以对于我不明白的任何显而易见的事情,都不要理睬。

我有一个工作的UITableView,我打算填充任务。 我希望用户能够根据需要添加和删除任务,因此我无法对任务进行硬编码,我希望在应用程序启动之间保存任务。 这样做的最明显的方法是创build一个在Realm中保存的数组。 问题是,我不明白如何在Realm中保存数组。 我已经阅读了Realm网站上的文档,但是由于我自己对Swift还是比较新的,所以发现它相当混乱(而且它在ObjC中)。 你将如何创build一个数组并保存它? 我最初试过这个,当它不工作时,我做了一些研究,发现RLMArray实际上并不是一个数组:

let ToDoTasksArray: RLMArray = ["Task Goes Here", "Task Goes Here2"] 

任何帮助吗? 谢谢!

编辑:

我也尝试将一个数组保存为RLMObject作为一个对象,如下所示:

 realm.addObject(ToDoTasksArray) 

但这也行不通,这并不令我感到意外。 一个数组不是一个对象。

您首先需要设置您的模型,以便您的待办事项可以保存到领域。

所有你需要做的是在你的一个文件(最好是todo.swift文件)

 class Todo: RLMObject { dynamic var name = "" } 

那么你可以通过这样做来创build你的前两个待办事项:

 var firstTodo = Todo() firstTodo.name = "My first thing todo!" var secondTodo = Todo() secondTodo.name = "My second thing todo!" 

然后你可以把它保存到领域

 let realm = RLMRealm.defaultRealm() realm.beginWriteTransaction() realm.addObject(firstTodo) realm.addObject(secondTodo) realm.commitWriteTransaction() 

现在你可以抓住所有的返回数组了

 let arrayOfTodos = Todo.allObjects() 

如果我要创build一个方法来保存新的待办事项,我会做这样的事情

 func createNewTodo(todo: String){ let todo = Todo() todo.name = todo let realm = RLMRealm.defaultRealm() realm.beginWriteTransaction() realm.addObject(todo) realm.commitWriteTransaction() } 

领域保存从RLMObject派生的对象,所以你需要为你的任务定义类,如:

 @interface Task : RLMObject @property NSString * task; @property NSString * description; @property NSDate * dueDate; ... @end RLM_ARRAY_TYPE(Task) // define RLMArray<Task> 

然后创build一个任务列表模型为:

 @interface TaskList : RLMObject @property RLMArray<Task> * tasks; @end 

现在创buildTask,将其添加到TaskList并保存:

 RLMRealm * realm = [RLMRealm defaultRealm]; [realm beginWriteTransaction]; Task * task = [Task new]; task.task = @"Some new task"; RLMArray <TaskList> * tasksLists = (RLMArray <TaskList> *)[TaskList allObjects]; // You can manage multiple task lists here using unique primary key for each task list. I am assuming that we have only one list. TaskList * taskList = tasksLists.firstObject; [taskList.tasks addObject: task]; [realm addOrUpdateObject: taskList]; [realm commitWriteTransaction]; 

希望这可以帮助。

对不起,我忽略了你提到你正在使用Swift。