我一直在寻找一些关于如何在Core Data中存储NSArray的示例代码,但是没有任何运气。我现在知道如何存储像NSStrings,NSDate和其他类型的数据,但努力存储NSArray。我读了很多文章说你必须把它写到磁盘上并写入文件,但我似乎无法理解它。
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)")
}
}
答案 0 :(得分:0)
U可以在核心数据中存储数组
在.xcdatamodeld文件中创建实体名称“Contact”并添加一个属性(任何名称)并选择“Transformable”类型。
然后
let entity = NSEntityDescription.entity(forEntityName: "Contact",in: managedContext)!
let person = NSManagedObject(entity: entity,insertInto: managedContext)
person.setValue("YourArrayName", forKeyPath: "YourArrayKeyName")
检查此link以获取有关在swift
中处理核心数据的更多详细信息答案 1 :(得分:0)
试试这个: -
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)")
}
答案 2 :(得分:0)
简短的回答是,你不能。
您有两个选择:
为您的对象Mobile(在您的数据模型中)创建一个新的Core Data Entity,并使用1:many关系链接到Person。 Core Data将自动为您生成方法(例如addToMobiles(_ value:Mobile))。
将Person的属性建模为“mobileNumbers”作为NSString。然后将移动号码存储为JSON blob(或任何其他结构)
第一个可能更“正确”,但如果您只存储数字,则第二个更容易。