【问题标题】:Local Parse Database gives error in SwiftUI本地解析数据库在 SwiftUI 中出现错误
【发布时间】:2019-08-14 05:54:36
【问题描述】:

我正在尝试将对象存储在设备本身的本地 Parse 数据存储中。检索存储的对象时出现错误:“方法需要启用固定。”

我在 AppDelegate.swift 中实现了 'Parse.enalbelLocalDatastore()。我试图对对象进行硬编码,以确保有对象要检索。


let configuration = ParseClientConfiguration
        {
            $0.applicationId = "..."
            $0.clientKey = "..."
            $0.server = "..."

        }
        Parse.enableLocalDatastore()
        Parse.initialize(with: configuration)
...
func blancoUser() {
        let object = PFObject(className: "UserData")
        object["id"] = (UUID().uuidString)
        object["LoginName"] = "userName"
        object["PinCode"] = "00000"
        object["ScreenName"] = "test"
        object["YearOfBirth"] = 0

        object.pinInBackground()
    }
...

let query = PFQuery(className: "UserData")
        var users:[UserData] = [UserData]()

        query.fromLocalDatastore()
        query.findObjectsInBackground { (objects: [PFObject]?, error: Error?) in
            if let error = error {
                print(error.localizedDescription)
            } else if let objects = objects

我想用本地存储的用户对象获取变量“用户”。我错过了什么?或者 ParseLocalDatastore 在 SwiftUI 中的工作方式是否有所不同。

【问题讨论】:

  • 您的 blancoUser() 方法不会保留记录。调用 pinInBackground() 不会保留记录。您应该在新对象上调用 saveInBackground()。

标签: parse-platform swiftui parse-ios-sdk


【解决方案1】:

你能尝试这样初始化SDK吗?

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

  func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        let parseConfig = ParseClientConfiguration {
            $0.isLocalDatastoreEnabled = true
            $0.applicationId = parseApplicationId
            $0.clientKey = parseClientKey
            $0.server = parseServerUrlString
        }
        Parse.initialize(with: parseConfig)
  }
}

参考:https://docs.parseplatform.org/ios/guide/#local-datastore

【讨论】:

  • 感谢您的建议:这条额外的行产生了错误“方法需要启用固定。”消失。但是,使用“object.pinInBackground()”命令在本地数据库中没有存储任何对象
  • 删除这一行 object["id"] = (UUID().uuidString) ids 是在服务器端设置的。您不能设置自己的 ID。
  • 不幸的是,这没什么区别。删除 id 后对象的打印: object: { LoginName = userName;密码 = 00000;屏幕名称 = 测试;出生年份 = 0;它没有显示我的查询:用户:[]
  • 在您发送的代码中,您永远不会设置用户变量。检查回调函数中的对象变量。
猜你喜欢
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 2020-09-02
  • 2015-05-22
  • 1970-01-01
  • 2020-12-22
相关资源
最近更新 更多