gpt4 book ai didi

ios - 如何将Core Data与Ensembles Framework同步?

转载 作者:行者123 更新时间:2023-11-30 12:05:14 24 4
gpt4 key购买 nike

我想使用 Ensembles Framework 将我的核心数据与 Swift 同步。

Ensembles Framework

但是我有一些困难..

我尝试这样做:(与github上的示例类似)我使用按钮来启动任务:

class ReglagesVC: UIViewController,UITableViewDataSource,UITableViewDelegate,UITextFieldDelegate,CDEPersistentStoreEnsembleDelegate {

@IBAction func IcloudSynch(_ sender: UIButton) {

CDESetCurrentLoggingLevel(CDELoggingLevel.verbose.rawValue)

// Setup Core Data Stack
self.setupCoreData()

// Setup Ensemble
let modelURL = Bundle.main.url(forResource: "Mes_Vide_os", withExtension: "momd")
cloudFileSystem = CDEICloudFileSystem(ubiquityContainerIdentifier: nil)
ensemble = CDEPersistentStoreEnsemble(ensembleIdentifier: "Mes_Vide_os", persistentStore: storeURL, managedObjectModelURL: modelURL!, cloudFileSystem: cloudFileSystem)
ensemble.delegate = self

// Listen for local saves, and trigger merges
NotificationCenter.default.addObserver(self, selector:#selector(localSaveOccurred(_:)), name:NSNotification.Name.CDEMonitoredManagedObjectContextDidSave, object:nil)
NotificationCenter.default.addObserver(self, selector:#selector(cloudDataDidDownload(_:)), name:NSNotification.Name.CDEICloudFileSystemDidDownloadFiles, object:nil)

// Sync
self.sync(nil)
}


//ENSEMBLES

// MARK: Notification Handlers

func localSaveOccurred(_ notif: Notification) {
self.sync(nil)
}

func cloudDataDidDownload(_ notif: Notification) {
self.sync(nil)
}

let appDelegate = UIApplication.shared.delegate as! AppDelegate



var storeDirectoryURL: URL {
return try! FileManager.default.url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
}

var storeURL: URL {
return self.storeDirectoryURL.appendingPathComponent("store.sqlite")
}
var managedObjectContext : NSManagedObjectContext!
func setupCoreData() {
let modelURL = Bundle.main.url(forResource: "Mes_Vide_os", withExtension: "momd")//"momd"
let model = NSManagedObjectModel(contentsOf: modelURL!)

try! FileManager.default.createDirectory(at: self.storeDirectoryURL, withIntermediateDirectories: true, attributes: nil)

let coordinator = NSPersistentStoreCoordinator(managedObjectModel: model!)
let options = [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true]
try! coordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: self.storeURL, options: options)

managedObjectContext = appDelegate.persistentContainer.viewContext
managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
managedObjectContext.persistentStoreCoordinator = coordinator
managedObjectContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
}


// MARK: Ensembles

var cloudFileSystem: CDECloudFileSystem!
var ensemble: CDEPersistentStoreEnsemble!

func sync(_ completion: (() -> Void)?) {
//let viewController = self.window?.rootViewController as! ReglagesVC
//self.activityIndicator?.startAnimating()

if !ensemble.isLeeched {
ensemble.leechPersistentStore {
error in
print("LEECH FINI___________________________")
completion?()
}
}
else {
ensemble.merge {
error in
print("MERGE FINI___________________________")
completion?()
}
}
}

func persistentStoreEnsemble(_ ensemble: CDEPersistentStoreEnsemble, didSaveMergeChangesWith notification: Notification) {

managedObjectContext.performAndWait {
self.managedObjectContext.mergeChanges(fromContextDidSave: notification)
}
}

func persistentStoreEnsemble(_ ensemble: CDEPersistentStoreEnsemble!, globalIdentifiersForManagedObjects objects: [Any]!) -> [Any]! {
let Films = objects as! [BaseFilms]
print("films map")
return Films.map { $0.id }
}

}

当我登录 cloudkit 仪表板时,我看到已经创建了一个容器,但数据文件夹中没有任何记录。

我的设备之间没有任何同步。

你能告诉我哪里错了吗?

谢谢。

最佳答案

通过将设置代码放入操作中,我的猜测是,每次按下按钮时,您都会创建一个新的 Ensemble(和核心数据堆栈)。您应该设置一次堆栈和集成,也许是在 viewDidLoad 中启动时,并将其保存在属性中。

请注意,第一次调用 sync 时,它将“leech”。这涉及导入本地数据,但不会上传任何内容。第二次调用sync时,它会从云端下载数据并上传。因此,您需要使用同一个集成对象调用 sync 两次,然后才能在 CloudKit Web 界面中看到任何数据。

另请注意,您只能看到登录用户在 CloudKit 中的数据。因此,除非您使用正在测试的帐户登录,否则您仍然看不到任何内容。

关于ios - 如何将Core Data与Ensembles Framework同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46748995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com