0

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

4

1 回答 1

0

swift 3 中的以下核心数据代码使用 x 代码 8 及更高版本可以正常工作,并且部署目标可以是低 IOS 8 和更高版本,一旦尝试就可以工作。明智地我编写了代码。

1)在appdelegate中导入Coredata

          import UIKit
          import CoreData


        @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate 
              var window: UIWindow?
  1. 在 appdelegate 中添加的此代码中,仅当 coredata 在所有版本的操作系统中工作时,您才需要此代码

    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.你在哪个类中获取数据然后你写这段代码这里也是同样的方式只是

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

    //获取数据 func 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)")
    }
    

    }

于 2017-03-25T18:15:14.540 回答