NSManagedObject and CoreData in swift 3 Xcode 8



我使用Xcode 8和swift 3,我从编辑器菜单,NSManageObjectModel中为我的实体创建NSManagedObject,如何使用这个文件来获取和创建对象,在Xcode 7中我使用核心数据堆栈来创建管理对象,持久存储和... .现在我不知道如何在swift 3中使用core data。

这个下面的核心数据代码在swift 3中使用x code 8和更高版本工作良好,并且部署目标可以低IOS 8和更高版本工作一次尝试。我一步一步地写代码。

在appdelegate中导入Coredata

          import UIKit
          import CoreData

        @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate 
              var window: UIWindow?
  • 在appdelegate中添加的代码中,只有当coredata在所有版本的os中工作时,你才需要这个代码

    private lazy var applicationDocumentsDirectory: URL = {
      let urls = FileManager.default.urls(for: .documentDirectory, in:
                                      .userDomainMask)
     return urls[urls.count-1]
     }()
     //   Core Data stack
    
    lazy var managedObjectModel: NSManagedObjectModel = {
    let modelURL = Bundle.main.url(forResource: "Coredata", withExtension: "momd")!
    return NSManagedObjectModel(contentsOf: modelURL)!
    }()
    lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
    let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
    let url = self.applicationDocumentsDirectory.appendingPathComponent("SingleViewCoreData.sqlite")
    var failureReason = "There was an error creating or loading the application's saved data."
    do {
        try coordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: url, options: nil)
    } catch {
        var dict = [String: AnyObject]()
        dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data" as AnyObject?
        dict[NSLocalizedFailureReasonErrorKey] = failureReason as AnyObject?
        dict[NSUnderlyingErrorKey] = error as NSError
        let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
        NSLog("Unresolved error (wrappedError), (wrappedError.userInfo)")
        abort()
      }
       return coordinator
       }()
      lazy var managedObjectContext: NSManagedObjectContext = {
      let coordinator = self.persistentStoreCoordinator
      var managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
      managedObjectContext.persistentStoreCoordinator = coordinator
      return managedObjectContext
      }()
     //   Core Data Saving support
         func saveContext () {
         if managedObjectContext.hasChanges {
        do {
            try managedObjectContext.save()
        } catch {
            let nserror = error as NSError
            NSLog("Unresolved error (nserror), (nserror.userInfo)")
            abort()
         }
        }
       }
    

    3。保存数据这就是你需要的数据,然后保存到数据库中您编写下面的代码这个写入ViewControllers类只是再次导入coredata并创建NSManagedObject

          var dataBase = [NSManagedObject]()
    
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let managedContext = appDelegate.managedObjectContext
        let entity =  NSEntityDescription.entity(forEntityName:
       "YourEntityName",in:managedContext)
        let activityData = NSManagedObject(entity: entity!,insertInto:
        managedContext)
        activityData.setValue(storeData1, forKey: "attributeKey1")
        activityData.setValue(storeData2, forKey: "attributeKey2")
        do {
            try managedContext.save()
            dataBase.append(activityData)
    
        } catch let error as NSError  {
            print("Could not save (error), (error.userInfo)")
        }
    }
    

    4。在你获取数据的课程中,你写这个代码,这里也是一样的Way just

    import coredata and create NSMangedObject
       var getData= [NSManagedObject]()
    

    //获取数据函数getLogsData() {

    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let managedContext = appDelegate.managedObjectContext
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "YourEntityName")
    do {
        let results = try managedContext.fetch(fetchRequest)
         } catch let error as NSError {
        print("Could not fetch (error), (error.userInfo)")
    }
    

    }

  • 最新更新