如何保存核心数据?

时间:2017-05-15 09:16:08

标签: ios swift core-data binary-data

我一直在寻找一些关于如何在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)")
        }


    }

3 个答案:

答案 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)

简短的回答是,你不能。

您有两个选择:

  1. 为您的对象Mobile(在您的数据模型中)创建一个新的Core Data Entity,并使用1:many关系链接到Person。 Core Data将自动为您生成方法(例如addToMobiles(_ value:Mobile))。

  2. 将Person的属性建模为“mobileNumbers”作为NSString。然后将移动号码存储为JSON blob(或任何其他结构)

  3. 第一个可能更“正确”,但如果您只存储数字,则第二个更容易。