在 CoreData 中创建实例
Posted
技术标签:
【中文标题】在 CoreData 中创建实例【英文标题】:Creating instance in CoreData 【发布时间】:2017-07-08 18:41:20 【问题描述】:我正在使用 swift,但我遇到了 CoreData 问题。 我想要实现的是创建文本字段(数量取决于用户)并将它们存储在核心数据中,并在第二个视图中显示此结果。这可能吗? 我有一个提示,我可以为文本字段创建一个实体,并在创建新文本字段时创建和存储该条目的实例,但我该怎么做?
我的应用程序基本上是这样的, firstView -> tableView -> secondView 并且在 firstView 用户可以添加他们想要的尽可能多的文本字段。我想保存这些制作的文本字段的文本并将其显示在 tableView 上。当用户选择单元格时,它会调用 secondView,它基本上是详细视图,并且它需要与 firstView 具有相同数量的文本字段。这可能吗?
谢谢你的变化很大。
【问题讨论】:
基本上不会在 Core Data 中保存 UI 元素的实例。保存相关属性/参数,根据参数动态创建UI元素。 非常感谢 :) 但是抱歉,我该怎么做呢?我一直在研究,但我不知道该怎么做:(如果你能告诉我怎么做,那将非常有帮助 【参考方案1】:你需要的是一个segue。在 ios 中,CoreData 用于存储一些用户关闭应用程序后可以重复使用的数据。因此,在您的情况下,如果您只想让表格视图在第一个视图中显示用户输入,只需使用 segue。然后,您可以在这个为 segue 准备的方法中传递数据。
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if let destinationViewController = segue.destination as? YourTableViewController
destinationViewController.texts = self.texts
//...
假设您有 10 个文本字段,并且您希望将其中的文本存储到 Core Data 中。您需要首先获取所有文本并将它们放入一个字符串数组中。将来,当您取出字符串数组时,您将通过对数组进行计数来知道有多少文本字段。
要将数组保存到CoreData,必须先将数组转换成Data
,因为CoreData不能接受数组类型。所以转换为 NSData 然后保存到 CoreData 的代码将是
let appDelegate =
UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let entity = NSEntityDescription.entityForName("Device", inManagedObjectContext:managedContext)
let device = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext)
let data = NSKeyedArchiver.archivedDataWithRootObject(array)
device.setValue(data, forKey: "dataOfArray")
do
try managedContext.save()
devices.append(device)
catch let error as NSError
print("Could not save \(error), \(error.userInfo)")
当你想取出数据并转换回数组时
let appDelegate =
UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "Device")
do
let results = try managedContext.executeFetchRequest(fetchRequest)
if results.count != 0
for result in results
let data = result.valueForKey("dataOfArray") as! NSData
let unarchiveObject = NSKeyedUnarchiver.unarchiveObjectWithData(data)
let arrayObject = unarchiveObject as AnyObject! as! [[String: String]]
let array = arrayObject
catch let error as NSError
print("Could not fetch \(error), \(error.userInfo)")
【讨论】:
是的,我知道这一点。但我不知道如何将数据保存到没有属性的护理数据中。因为用户可以制作他们想要的尽可能多的文本字段,所以当我无法设置属性时,我不知道如何保存它。或者我可以吗?我知道我可以设置属性并将数据保存在那里,因为我已经多次使用核心数据。但是我可以用无限数量的文本字段来做到这一点吗?我该怎么做? @dropscar Gocha,最后一个问题。你必须使用核心数据吗?读取和写入数组到核心数据的代码就像 50 行。如果你可以使用 UserDefaults,它只需要写 1 行,读 1 行 不幸的是我这样做了:(这是我正在做的项目,它需要在 CoreData 中。非常感谢你,希望你有一个解决方案:( @dropscar 更新了我的答案 非常感谢您如此快速的回复!我会尽快试试这个!非常感谢 !! :)以上是关于在 CoreData 中创建实例的主要内容,如果未能解决你的问题,请参考以下文章