关键词:
【中文标题】尝试使用 coredata 保存待办事项列表不保存【英文标题】:Attempting to save todo list using coredata doesnt save 【发布时间】:2019-06-18 19:32:22 【问题描述】:我已经设置了一个 tableview 控制器,并将它用于带有 coredata 的重量跟踪列表,以保存所有的条目。虽然在应用程序打开时添加条目并显示它们,但在下一次应用程序加载时它不会显示这些条目。我很感谢您的帮助,因为我对 swift 编码相对较新。
data model screenshot
import UIKit
import CoreData
class TodoViewController: UITableViewController
var items = [Items]()
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
var selectedCategory: Items?
didSet
loadItems()
override func viewDidLoad()
super.viewDidLoad()
//MARK: Table View Datasource Methods
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return items.count
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "Item", for: indexPath)
let item = items[indexPath.row]
cell.textLabel?.text = item.name
cell.accessoryType = item.completed ? .checkmark : .none
return cell
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
tableView.deselectRow(at: indexPath, animated: true)
items[indexPath.row].completed = !items[indexPath.row].completed
saveItems()
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool
return true
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath)
if (editingStyle == .delete)
let item = items[indexPath.row]
items.remove(at: indexPath.row)
context.delete(item)
do
try context.save()
catch
print("Error deleting item with \(error)")
tableView.deleteRows(at: [indexPath], with: .automatic)
@IBAction func addButtonPressed(_ sender: UIBarButtonItem)
var textField = UITextField()
let alert = UIAlertController(title: "Add New Weight", message: "", preferredStyle: .alert)
let action = UIAlertAction(title: "Save", style: .default) (action) in
let newItem = Items(context: self.context)
newItem.name = textField.text!
self.items.append(newItem)
self.saveItems()
alert.addAction(action)
alert.addTextField (field) in
textField = field
textField.placeholder = "Add Weight"
present(alert, animated: true, completion: nil)
func saveItems()
do
try context.save()
catch
print("Error Saving item with \(error)")
self.tableView.reloadData()
func loadItems()
let request: NSFetchRequest<Items> = Items.fetchRequest()
do
items = try context.fetch(request)
catch
print("Error fetching data from context \(error)")
tableView.reloadData()
【问题讨论】:
【参考方案1】:将你的 items 数组更新为 NSManagedObject
var items: [NSManagedObject] = []
使用此方法进行保存并从保存操作中调用它:
func save(name: String, completed: Bool)
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else
return
let managedContext = appDelegate.persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "Items", in: managedContext)!
let item = NSManagedObject(entity: entity, insertInto: managedContext)
item.setValue(name, forKeyPath: "name")
item.setValue(completed, forKeyPath: "completed")
do
try managedContext.save()
items.append(item)
catch let error as NSError
print("Could not save. \(error), \(error.userInfo)")
对于加载项目,请使用以下方法:
func loadItems()
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else
return
let managedContext = appDelegate.persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Items")
do
items = try managedContext.fetch(fetchRequest)
catch let error as NSError
print("Could not fetch. \(error), \(error.userInfo)")
然后将 cellForRowAtIndexPath 方法更新为:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "Item", for: indexPath)
let item = items[indexPath.row]
cell.textLabel?.text = item.value(forKeyPath: "name") as? String
cell.accessoryType = item.value(forKeyPath: "completed") as? Bool ? .checkmark : .none
return cell
使用 KVC 访问数组项中的任何属性,如下所示:
item.value(forKeyPath: "name") as? String
【讨论】:
CoreData 不将数据保存到数据库
】CoreData不将数据保存到数据库【英文标题】:CoreDatadoesn\'tsavedatatodatabase【发布时间】:2015-01-0720:49:35【问题描述】:我正在按照Youtube上的教程使用Swift编写iOS应用程序。该应用程序将具有与待办事项列表应用程序相同的功能,... 查看详情
使用 jQuery 将新列表项添加到待办事项列表?
...然后还将一个COMPLETED按钮附加到每个项目。以下代码是我尝试过的。它仅显示数组中的原始4项。我被困在这里,任何帮助将不胜感激。 查看详情
无法从 Listview 中删除项目(待办事项列表),长按没有任何反应
...gpress【发布时间】:2021-12-3020:44:04【问题描述】:我正在尝试使用sqlite创建一个待办事项列表,当我长时间按下一个项目时,它将从列表(以及数据库)中删除。但我做不到,不明白如何删除(我是新手)。我还可以在s 查看详情
如何使用 JsPdf 下载完整的待办事项 (vue.js) 列表?
...:2022-01-2121:25:54【问题描述】:我是这个领域的初学者。尝试使用vue.js做一个小项目。我想为用户提供一个选项来下载他们的Vue.js待办事项列表。我已经导入了jspdf库和Html2canvas。ThisiswhatIgotasanou 查看详情
无法在初始渲染中显示待办事项列表
...nreact【发布时间】:2021-08-0708:32:06【问题描述】:我正在尝试使用react、redux、redux-form和firestore数据库构建todoList,我还可以使用操作或操作创建器将待办事项插入数据库中,我可以获取数据库中的数据存储但是当用户第一次访... 查看详情
如何在应用程序中保存数据?
...的待办事项程序。我想保存用户创建的任务列表。现在我尝试将它们保存为文本文件,但我不希望这样。我想要它,以便我可以保存用户在程序中创建的任务而不是外部文本文件,然后检索这些保存的文件并将它们显示在文本文... 查看详情
在AngularJS中编写待办事项列表时无法理解删除过程
...ularJS【发布时间】:2017-02-1718:45:38【问题描述】:我正在尝试使用以下代码在Angularjs中编写待办事项应用程序。functionwrite_controller($scope)$scope.todos=[text: 查看详情
使用 localStorage 的待办事项列表
】使用localStorage的待办事项列表【英文标题】:To-DoListwithlocalStorage【发布时间】:2019-06-0213:23:53【问题描述】:我做了一个简单的待办事项清单。但我想让一个列表元素有一个text-decoration=line-through当我单击按钮时,列表项将设... 查看详情
在 Swift 3 中保存表格视图的数据
...Swift3【发布时间】:2017-01-2000:48:59【问题描述】:我正在尝试使用Swift3和Xcode8构建一个简单的待办事项列表应用程序。它包括一个文本输入框、一个提交按钮和一个表格,其中每个单元格都包含一个标题和一个显示日期。到目前... 查看详情
在待办事项列表中隐藏/显示不同的内容并使用 JavaScript 一次显示一个内容 [关闭]
】在待办事项列表中隐藏/显示不同的内容并使用JavaScript一次显示一个内容[关闭]【英文标题】:hide/showdifferentcontentintodolistandshowonecontentatatimeusingJavaScript[closed]【发布时间】:2021-11-2016:23:59【问题描述】:我正在使用laravel框架构... 查看详情
如何让 splice() 方法在我的待办事项列表中工作?
...删除按钮和我的删除功能之间的“连接”似乎有效。我也尝试了slice方法并且有效,但由于某种原因,sp 查看详情
NSDocument 用于关系数据/待办事项列表?
...也与其他实体有关系。我为此创建了一个iOS应用程序,它使用核心数据数据模型.... 查看详情
用户特定内容
...和整个后端领域的新手,我需要一些启发。基本上我正在尝试制作一个用户可以注册和登录的应用程序。当用户登录时,他可以创建简单的东西,例如待办事项列表。待办事项列表随后保存在数据库中,并且只能由创建它的用户... 查看详情
通过recyclerview按日期排序显示sqlite中保存的数据
...问题描述】:我的应用是一个待办事项列表应用。我正在尝试根据保存到sqlite数据库和数组列表中的日期对recyclerview中的数据进行排序。我见过有人说我可以使用比较器来做到 查看详情
不保存上下文的 CoreData 保存
】不保存上下文的CoreData保存【英文标题】:CoreDataSavingwithoutSavingContext【发布时间】:2020-11-0502:34:44【问题描述】:我在使用CoreData时遇到了一些问题。在使用实体之前,我将它们从Coredata中删除,并打印出来以确保它们确实被... 查看详情
如何在内部保存我的数据?
...nally?【发布时间】:2013-09-1222:11:11【问题描述】:我正在尝试创建一个“待办事项列表”,并且我已经完成了所有工作,除了保存数据。我是新手,想知道是否有人可以告诉我如何在内部完成保存数据。这是我的代码:Main_ToDoLis... 查看详情
如何在 Swift 中保存复选标记?
】如何在Swift中保存复选标记?【英文标题】:HowtosavecheckmarkinSwift?【发布时间】:2019-03-0213:03:05【问题描述】:我正在为自己制作一个待办事项应用程序,并且我想制作一个功能来将待办事项标记为已完成。它添加了一个复选... 查看详情
如何从 laravel 的列表中删除待办事项列表项?
...ravel?【发布时间】:2019-10-3105:11:56【问题描述】:我正在尝试删除laravel中的一个项目。这是我的代码:这是我的路线:Route::resource(\'\',\'TodosController\');这是我的控制器:namespaceApp\\Http\\Cont 查看详情