我正在使用swift,我对CoreData有疑问。 我想要实现的是创建文本字段(数字取决于用户)并将它们存储在核心数据中,并在第二个视图中显示此结果。这可能吗? 我有一个提示,我可以为文本字段创建一个实体,并在创建新文本字段时创建和存储实例以及此条目,但我该怎么做?
我的应用基本上就像, firstView - > tableView - > secondView 并且在firstView用户可以添加他们想要的文本字段。我想保存这些制作的文本字段的文本并将其显示在tableView上。当用户选择单元格时,它调用第二个View,它基本上是详细视图,并且它需要具有与firstView相同数量的文本字段。这可能吗?
谢谢你的不同。
答案 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)")
}