如何使用 RLMArray 保存数组
How to use RLMArray to save an Array
注意:我对 Realm 和 Swift 还很陌生,所以请原谅我不明白的任何显而易见的事情。
我有一个工作的 UITableView,我计划用任务填充它。我希望用户能够根据需要添加和删除任务,所以我不能对任务进行硬编码,而且我希望在应用程序启动之间保存任务。最明显的方法是创建一个保存在 Realm 中的数组。问题是,我不明白如何在 Realm 中保存数组。我已经阅读了 Realm 站点上的文档,但发现它相当混乱,因为我自己对 Swift 还是相当陌生(而且它在 ObjC 中)。你将如何创建一个数组并保存它?我最初尝试过这个,当它不起作用时我做了一些研究,发现 RLMArray 实际上不是一个数组:
let ToDoTasksArray: RLMArray = ["Task Goes Here", "Task Goes Here2"]
有什么帮助吗?谢谢!
编辑:
我也试过将数组作为对象保存到 RLMObject 中:
realm.addObject(ToDoTasksArray)
但这也行不通,这并不让我感到惊讶。数组不是对象。
您首先需要设置您的模型,以便您的待办事项可以保存到领域。
您需要做的就是将其放入您的文件之一(最好是 todo.swift 文件)
class Todo: RLMObject {
dynamic var name = ""
}
然后你可以通过这样做来创建你的前两个待办事项:
var firstTodo = Todo()
firstTodo.name = "My first thing todo!"
var secondTodo = Todo()
secondTodo.name = "My second thing todo!"
然后就可以保存到realm
let realm = RLMRealm.defaultRealm()
realm.beginWriteTransaction()
realm.addObject(firstTodo)
realm.addObject(secondTodo)
realm.commitWriteTransaction()
现在您可以获取所有待办事项,其中 returns 一个数组
let arrayOfTodos = Todo.allObjects()
如果我要创建一种方法来保存新的待办事项,我会这样做
func createNewTodo(todo: String){
let todo = Todo()
todo.name = todo
let realm = RLMRealm.defaultRealm()
realm.beginWriteTransaction()
realm.addObject(todo)
realm.commitWriteTransaction()
}
Realm 保存从 RLMObject 派生的对象,因此您需要为您的任务定义 class,例如:
@interface Task : RLMObject
@property NSString * task;
@property NSString * description;
@property NSDate * dueDate;
...
@end
RLM_ARRAY_TYPE(Task) // define RLMArray<Task>
然后创建任务列表模型为:
@interface TaskList : RLMObject
@property RLMArray<Task> * tasks;
@end
现在您创建任务,将其添加到任务列表并保存:
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。
注意:我对 Realm 和 Swift 还很陌生,所以请原谅我不明白的任何显而易见的事情。
我有一个工作的 UITableView,我计划用任务填充它。我希望用户能够根据需要添加和删除任务,所以我不能对任务进行硬编码,而且我希望在应用程序启动之间保存任务。最明显的方法是创建一个保存在 Realm 中的数组。问题是,我不明白如何在 Realm 中保存数组。我已经阅读了 Realm 站点上的文档,但发现它相当混乱,因为我自己对 Swift 还是相当陌生(而且它在 ObjC 中)。你将如何创建一个数组并保存它?我最初尝试过这个,当它不起作用时我做了一些研究,发现 RLMArray 实际上不是一个数组:
let ToDoTasksArray: RLMArray = ["Task Goes Here", "Task Goes Here2"]
有什么帮助吗?谢谢!
编辑:
我也试过将数组作为对象保存到 RLMObject 中:
realm.addObject(ToDoTasksArray)
但这也行不通,这并不让我感到惊讶。数组不是对象。
您首先需要设置您的模型,以便您的待办事项可以保存到领域。
您需要做的就是将其放入您的文件之一(最好是 todo.swift 文件)
class Todo: RLMObject {
dynamic var name = ""
}
然后你可以通过这样做来创建你的前两个待办事项:
var firstTodo = Todo()
firstTodo.name = "My first thing todo!"
var secondTodo = Todo()
secondTodo.name = "My second thing todo!"
然后就可以保存到realm
let realm = RLMRealm.defaultRealm()
realm.beginWriteTransaction()
realm.addObject(firstTodo)
realm.addObject(secondTodo)
realm.commitWriteTransaction()
现在您可以获取所有待办事项,其中 returns 一个数组
let arrayOfTodos = Todo.allObjects()
如果我要创建一种方法来保存新的待办事项,我会这样做
func createNewTodo(todo: String){
let todo = Todo()
todo.name = todo
let realm = RLMRealm.defaultRealm()
realm.beginWriteTransaction()
realm.addObject(todo)
realm.commitWriteTransaction()
}
Realm 保存从 RLMObject 派生的对象,因此您需要为您的任务定义 class,例如:
@interface Task : RLMObject
@property NSString * task;
@property NSString * description;
@property NSDate * dueDate;
...
@end
RLM_ARRAY_TYPE(Task) // define RLMArray<Task>
然后创建任务列表模型为:
@interface TaskList : RLMObject
@property RLMArray<Task> * tasks;
@end
现在您创建任务,将其添加到任务列表并保存:
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。