在CoreData中创建实例

时间:2017-07-08 18:41:21

标签: ios swift core-data swift3

我正在使用swift,我对CoreData有疑问。 我想要实现的是创建文本字段(数字取决于用户)并将它们存储在核心数据中,并在第二个视图中显示此结果。这可能吗? 我有一个提示,我可以为文本字段创建一个实体,并在创建新文本字段时创建和存储实例以及此条目,但我该怎么做?

我的应用基本上就像, firstView - > tableView - > secondView 并且在firstView用户可以添加他们想要的文本字段。我想保存这些制作的文本字段的文本并将其显示在tableView上。当用户选择单元格时,它调用第二个View,它基本上是详细视图,并且它需要具有与firstView相同数量的文本字段。这可能吗?

谢谢你的不同。

1 个答案:

答案 0 :(得分:0)

您需要的是一个叫做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中。您需要先获取所有文本并将它们放入String数组中。将来,当您获取字符串数组时,您将通过对数组进行计数来了解有多少文本字段。

要将数组保存到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)")
}