问题描述
我有一个类(CompEntry),它带有指向其他2个类的指针(用户-默认Parse类和Competition)。
如果我使用whereKey等于远程Parse服务器中的特定Competition ObjectId来查询CompEntry,它将返回[PFObject]数组的预期结果。
我想将该数据脱机到iOS Local Datastore,所以我将其固定在后台。
ArmSegment
这会导致错误(模拟器控制台-最后一行是打印语句):
2020-09-17 10:08:22.991233 + 0100 Parse-2 [69334:2219916]-[PFObject 长度]:无法识别的选择器已发送到实例0x60000304efa0
获取错误:错误域=解析代码= 102“-[PFObject长度]: 无法识别的选择器已发送到实例0x60000304efa0“ UserInfo = {错误=-[PFObject长度]:无法识别的选择器发送到 实例0x60000304efa0,NSLocalizedDescription =-[PFObject长度]: 无法识别的选择器已发送到实例0x60000304efa0,代码= 102}
返回的对象数:无
哪个来自我的完成处理程序的错误处理部分-唯一执行的部分。
我的代码是:
query.fromLocalDatastore()
找到模拟器的本地工作目录,我在sqlite浏览器中打开了ParSEOfflinestore文件。当前包含我期望的所有对象:
此后,我一直手动确保将相关对象(用户和竞赛)固定到它们自己的离散函数中以进行查询和固定。该数据在上面的屏幕截图中,显示未更改。
遵循的过程是:
- 在模拟器上的第一个运行时,在代码中注释
let query = PFQuery(className: "CompEntry") query.whereKey("CompID",contains: "someObjectId") // COMP OBJECTID STRING query.includeKeys(["UserID","CompID"]) // FIELD headingS OF POINTER COLUMNS query.fromLocalDatastore() // COMMENTED OUT 1ST RUNTIME,TO GET REMOTE DATA AND PIN. THEN RE-RUN WITH THIS LINE ACTIVE query.findobjectsInBackground { (objects,error) in if let error = error { print("Get Error: \(error)") } print("Returned object count: \(objects?.count)") if let objects = objects { // THIS BLOCK IS COMMENTED OUT AFTER INITIAL PINNING (1ST RUNTIME) PFObject.pinAll(inBackground: objects,withName: name) { (success,error) in if success { print("Pinned all objects") } if error != nil { print("Pinning error: \(error)") } } } }
调用 - 运行填充本地数据存储区的查询
- 使用sqlite浏览器验证本地数据存储
- 停止应用
- 从步骤1中的代码中删除注释,因此它现在使用本地数据存储
- 注释pinAll()块调用,因为它不需要重新固定
- 在模拟器上重新运行应用程序
- 发生错误消息,并且查询返回的对象为nil
我在另一个没有指针的类上运行了完全不同的查询,将其固定,然后从本地数据存储中重新运行查询,该查询可以正常工作。
非常感谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)