Ios 如何保存核心数据?
我已经搜索了一些关于如何在核心数据中存储NSArray的示例代码有一段时间了,但没有找到任何运气。我现在知道如何存储数据,比如NSStrings、NSDate和其他类型的数据,但很难存储NSArray。我读过很多文章,说你必须把它写到磁盘上,然后写到文件上,但我似乎不明白Ios 如何保存核心数据?,ios,swift,core-data,binary-data,Ios,Swift,Core Data,Binary Data,我已经搜索了一些关于如何在核心数据中存储NSArray的示例代码有一段时间了,但没有找到任何运气。我现在知道如何存储数据,比如NSStrings、NSDate和其他类型的数据,但很难存储NSArray。我读过很多文章,说你必须把它写到磁盘上,然后写到文件上,但我似乎不明白 import UIKit class Person: NSObject { var fullName : String! var mobileNumbers : [Mobile]! } import UIKit clas
import UIKit
class Person: NSObject {
var fullName : String!
var mobileNumbers : [Mobile]!
}
import UIKit
class Mobile: NSObject {
var mobileNumber : String!
}
// core data save method
下面的方法显示保存到核心数据
func save(name: Person) {
guard let appDelegate =
UIApplication.shared.delegate as? AppDelegate else {
return
}
var managedContext = NSManagedObjectContext()
if #available(iOS 10.0, *) {
managedContext = appDelegate.persistentContainer.viewContext
} else {
// Fallback on earlier versions
}
let entity = NSEntityDescription.entity(forEntityName: "Contact",in: managedContext)!
let person = NSManagedObject(entity: entity,insertInto: managedContext)
person.setValue(name.fullName, forKeyPath: "fullName")
if let mob = name.mobileNumberList{
let arch = NSKeyedArchiver.archivedData(withRootObject: mob[0])
print(arch)
person.setValue(arch, forKey: "mobileNumberList")
}
do {
try managedContext.save()
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
}
U可以在核心数据中存储一个数组
func save(name: Person) {
guard let appDelegate =
UIApplication.shared.delegate as? AppDelegate else {
return
}
var managedContext = NSManagedObjectContext()
if #available(iOS 10.0, *) {
managedContext = appDelegate.persistentContainer.viewContext
} else {
// Fallback on earlier versions
}
let entity = NSEntityDescription.entity(forEntityName: "Contact",in: managedContext)!
let person = NSManagedObject(entity: entity,insertInto: managedContext)
person.setValue(name.fullName, forKeyPath: "fullName")
if let mob = name.mobileNumberList{
let arch = NSKeyedArchiver.archivedData(withRootObject: mob[0])
print(arch)
person.setValue(arch, forKey: "mobileNumberList")
}
do {
try managedContext.save()
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
}
在.xcdatamodeld文件中,创建实体名称“Contact”,并添加属性(任意名称),然后选择类型“Transformable”
然后
有关swift中核心数据工作的更多详细信息,请勾选此项
func save(name: Person) {
guard let appDelegate =
UIApplication.shared.delegate as? AppDelegate else {
return
}
var managedContext = NSManagedObjectContext()
if #available(iOS 10.0, *) {
managedContext = appDelegate.persistentContainer.viewContext
} else {
// Fallback on earlier versions
}
let entity = NSEntityDescription.entity(forEntityName: "Contact",in: managedContext)!
let person = NSManagedObject(entity: entity,insertInto: managedContext)
person.setValue(name.fullName, forKeyPath: "fullName")
if let mob = name.mobileNumberList{
let arch = NSKeyedArchiver.archivedData(withRootObject: mob[0])
print(arch)
person.setValue(arch, forKey: "mobileNumberList")
}
do {
try managedContext.save()
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
}
在.xcdatamodeld文件中,创建实体名称“Contact”,并添加属性(任意名称),然后选择类型“Transformable”
然后
有关swift中核心数据工作的更多详细信息,请勾选此项
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {return}
let managedContext = appDelegate.persistentContainer.viewContext
let user:UserModel = NSEntityDescription.insertNewObject(forEntityName: "User", into: managedContext) as! UserModel
user.name = txtName.text!
var arr: [UInt32] = [32, 4, UInt32.max]
let data = Data(buffer: UnsafeBufferPointer(start: &arr, count: arr.count))
user.arr = data
do {
try managedContext.save()
} catch let error as NSError
{
print("Could not save. \(error), \(error.userInfo)")
}
试试这个:-
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {return}
let managedContext = appDelegate.persistentContainer.viewContext
let user:UserModel = NSEntityDescription.insertNewObject(forEntityName: "User", into: managedContext) as! UserModel
user.name = txtName.text!
var arr: [UInt32] = [32, 4, UInt32.max]
let data = Data(buffer: UnsafeBufferPointer(start: &arr, count: arr.count))
user.arr = data
do {
try managedContext.save()
} catch let error as NSError
{
print("Could not save. \(error), \(error.userInfo)")
}
简而言之,你不能 您有两种选择:
第一种可能更“正确”,但如果您只存储数字,第二种更容易。简而言之,您不能 您有两种选择:
第一种可能更“正确”,但如果只存储数字,第二种更容易。coredata提供了一种称为可转换的选项数据类型,而不是使用Archiver。您可以在实体中将数据类型设置为可转换。。查看我在这个链接上的答案,将字典替换为数组类型看起来您已经有了执行此操作的代码,用于
mobileNumberList
属性。它不起作用吗?如果没有,具体出了什么问题?coredata没有使用Archiver,而是提供了一个名为Transformable的选项数据类型。您可以在实体中将数据类型设置为可转换。。查看我在这个链接上的答案,将字典替换为数组类型看起来您已经有了执行此操作的代码,用于mobileNumberList
属性。它不起作用吗?如果没有,具体出了什么问题?根据您@venkat更改数组类型根据您@venkat更改数组类型