【发布时间】:2018-11-22 15:13:23
【问题描述】:
我对 Swift 和一般编码比较陌生。我现在正在努力磨练自己的技能,但正在组合一个简单的提醒应用程序。在我把故事板放在一起之前,我试图让后端工作,但我有必要的故事板元素来测试我的系统是否可以工作。
基本上,我试图保存一个包含自定义对象的数组,但这个数组被附加到用户完成的每个提醒添加中。这样每次应用程序打开时,数组都会包含上次的提醒。
这是我目前创建和附加列表的代码;
func createReminder() {
let reminderAdd = Reminder(chosenReminderDescription: textRetrieve.text!, chosenReminderLength: 1)
reminderList.append(reminderAdd)
dump(reminderList)
}
这是目标代码;
class Reminder {
var reminderDescription = "Require initalisation."
var reminderLength = 1 // in days
init (chosenReminderDescription: String, chosenReminderLength: Int) {
reminderDescription = chosenReminderDescription
reminderLength = chosenReminderLength
}
}
我将如何保存数组?
编辑: 这是我到目前为止添加的内容。
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let reminderAdd = Reminder(chosenReminderDescription: "Placeholder test", chosenReminderLength: 1)
reminderList.append(reminderAdd)
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "Tasks", in: context)
let newTask = NSManagedObject(entity: entity!, insertInto: context)
newTask.setValue(reminderList, forKey: "taskName")
do {
try context.save()
} catch {
print("Failed saving")
}
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Tasks")
//request.predicate = NSPredicate(format: "age = %@", "12")
request.returnsObjectsAsFaults = false
do {
let result = try context.fetch(request)
for data in result as! [NSManagedObject] {
print(data.value(forKey: "taskName"))
}
} catch {
print("Failed")
}
我遇到了崩溃,我似乎还无法调试它。我相信这条线会导致崩溃,因为当我删除它时,应用程序启动正常。
let reminderAdd = Reminder(chosenReminderDescription: "Placeholder test", chosenReminderLength: 1)
reminderList.append(reminderAdd)
有什么想法吗?
编辑 2: datamodel
那是数据模型,我不完全确定您将对象变成可编码的意思。再次感谢。
编辑 3:
ViewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "Tasks", in: context)
let newTask = Tasks(entity: entity!, insertInto: context)
newTask.setValue(reminderList, forKey: "taskName")
do {
try context.save()
} catch {
print("Failed saving")
}
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Tasks")
//request.predicate = NSPredicate(format: "age = %@", "12")
request.returnsObjectsAsFaults = false
do {
let result = try context.fetch(request)
for data in result as! [Tasks] {
print(data.value(forKey: "taskName"))
}
} catch {
print("Failed")
}
dump(reminderList)
}
【问题讨论】:
-
您可以将其保存到
.json文件、sqlite数据库、NSUserDefaults,将其发送到某个地方的云,或许多其他持久性替代方案。你试过什么? -
@Ian 不要使用 UserDefaults 来存储应用数据。
-
@rmaddy 我的意思是,我说可以,而不是应该,对吧? :)
-
@IanMacDonald 我弄乱了 UserDefaults 但无法让它工作。今晚我会玩一玩,看看我能想出什么。
-
@IanMacDonald 我已经搞砸了核心数据,但我遇到了更多问题。我相信数据正在保存和获取,但是现在我已经尝试向数组添加一个值,以便它实际上可以保存不仅仅是一个空数组的东西,它会崩溃,请参阅我的编辑。谢谢,Sav。