ParseSwift SDK 中的 ParseKeyValueStore,backingStore 意外发现 nil

Posted

技术标签:

【中文标题】ParseSwift SDK 中的 ParseKeyValueStore,backingStore 意外发现 nil【英文标题】:ParseKeyValueStore in ParseSwift SDK, backingStore Unexpectedly found nil 【发布时间】:2021-06-17 12:57:44 【问题描述】:

我很难理解 ParseSwift 初始化程序中 keyValueStore 的概念。这些是我使用 Parse 和这个 SDK 的第一步,因为我最终决定不使用 Firebase。

从 AppDelegate 中的简单初始化开始:

ParseSwift.initialize(applicationId: "...",
                              clientKey: "...",
                              serverURL: URL(string: "https://...")!)

出于学习目的,我创建了用户结构:

struct ParseUsr: ParseUser 
    
    //: These are required for `ParseObject`.
    var objectId: String?
    var createdAt: Date?
    var updatedAt: Date?
    var ACL: ParseACL?

    //: These are required for `ParseUser`.
    var username: String?
    var email: String?
    var password: String?
    var authData: [String: [String: String]?]?
    
    

然后当我的应用程序启动时,我正在检查当前用户是否为 nil,为简单起见,只需打印它:

print(ParseUsr.current)

但是在第 46 行检索到 nil 时,ParseStorage.swift -> backingStore“在隐式展开可选值时意外发现 nil”

后来我也尝试在初始化程序中添加 keyValueStore:

ParseSwift.initialize(applicationId: "...",
                              clientKey: "...",
                              serverURL: URL(string: "https://...")!, keyValueStore: KeyChain())

到目前为止,KeyChain 的类是空实现,但这不应导致backingStore 上出现上述 nil 异常:

class KeyChain: ParseKeyValueStore 
    
    func delete(valueFor key: String) throws 
         
    
    
    func deleteAll() throws 
         
    
    
    func get<T>(valueFor key: String) throws -> T? where T : Decodable 
        return nil
    
    
    func set<T>(_ object: T, for key: String) throws where T : Encodable 
         
    
 

能否请您提示如何使用当前用户的本地持久性?

谢谢!

【问题讨论】:

【参考方案1】:

原因我认为是“代码竞赛”:

我确实在 didFinishLaunchingWithOptions 中调用了初始化程序,并且在执行异步初始化时,第一个 viewController 的 viewDidLoad 中的另一个代码执行得更快,因此在初始化 Parse 之前调用了 print(user.current)

我在 didFinishLaunchingWithOptions 中将 Parse init 作为第一个移动,现在它工作正常。

【讨论】:

以上是关于ParseSwift SDK 中的 ParseKeyValueStore,backingStore 意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章

ParseSwift ParseObject QueryConstraint

通过子关系 ParseSwift 查询父级

ParseSwift queryConstraint 对象

使用 Parse Swift 在 mongoDB 上进行查询

Android Studio和Pepper SDK中的问题

Parse Android SDK - 基于 Android SDK 中的指针查询