2017-09-19 41 views
1

我有一个tableview。点击上面有一个按钮,弹出一个带有textField的警报,我可以在textField上输入一些数据。点击'确定'后,alertview上的内容将填充到tableview中。我也将这些数据存储在CoreData中。在桌面视图上持久化数据(存储在coredata中)问题

但问题是,当我关闭应用程序或导航到另一个屏幕时,tableview中的数据已被删除,而它应该保留并保留在屏幕上,即使在导航到另一个屏幕或关闭应用程序时也是如此存储在CoreData中。

应该做什么......?请帮助...

而且,这是我现在的储蓄数据:

guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { 
      return } 
let managedContext = appDelegate.persistentContainer.viewContext 
let entity = NSEntityDescription.entity(forEntityName: "Category", in: managedContext) 
let category = NSManagedObject(entity: entity!, insertInto: managedContext) 

category.setValue(categoryName, forKeyPath: "categoryName") 
category.setValue(categoryId, forKey: "categoryId") 

    do { 

    try managedContext.save() 
    self.managedObject.append(category as! Category) 
    } catch let error as NSError { 
    print("Could not save. \(error), \(error.userInfo)") 
    } 
+1

请出示你的代码更好的响应 –

+0

你保存管理对象范围内? – Paulw11

+0

@ Paulw11数据是否应该被提取,以便在我访问屏幕时显示在桌面上...? –

回答

1

据我了解,你在coredata已输入的旧数据是不可见的TableView,如果这是这种情况下,它正常工作,因为TableView不会持久数据。数据保存在coreData中,您只需从Coredata中获取数据并将其加载到TableView中即可。下面的代码

使用来获取

var category = [Category]() // Where Category = your NSManaged Class 

    var fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Category") 

    do { 
     category = try context.fetch(fetchRequest) as! [Category] 
    } catch { 
     fatalError("Failed to fetch category: \(error)") 
    } 

// Then you can use this array to populate UITableView Datasource and Call. 
arrTableView = category 
tableView.reloadData() 
+0

它不工作,@sudhir库马尔。第三行的语法看起来不合适。 –

+0

感谢您告诉我,我编辑了我的代码。希望这个帮助 –

+0

似乎还有一个问题,@Sudhir kumar。此行抛出错误“arrTableView = category”,因为具有tableview元素的数组是一种字符串,而'category'的类型是'Category'。将数组的字符串类型更改为类型数组的数组会影响很多其他地方...... :( –