Ios Swift-Parse Platform-尝试将对象.pin()锁定到本地数据存储时出错。旧objectId为(null)
我的应用程序中有两个类Ios Swift-Parse Platform-尝试将对象.pin()锁定到本地数据存储时出错。旧objectId为(null),ios,swift,parse-platform,Ios,Swift,Parse Platform,我的应用程序中有两个类 class UserEvent: PFObject, PFSubclassing { @NSManaged var target:PFUser @NSManaged var notifyTarget:Bool @NSManaged var requiresAction:Bool @NSManaged var affectedRelationship:UserRelationship? static func parseClassName() ->
class UserEvent: PFObject, PFSubclassing {
@NSManaged var target:PFUser
@NSManaged var notifyTarget:Bool
@NSManaged var requiresAction:Bool
@NSManaged var affectedRelationship:UserRelationship?
static func parseClassName() -> String {
return "UserEvent"
}
}
及
我正在尝试pin()
一个UserEvent
的新实例,它包含一个指向受影响的UserRelationship
的指针
我知道解析中的固定是递归的,当我固定一个对象时,它也会固定该对象指向的任何对象。我遇到的问题是,每当我尝试固定一个新的UserEvent
,它也会尝试递归地固定链接的UserRelationship
对象,该对象在很久以前的代码中被固定。这样做时,我会得到以下错误:
2020-06-03 11:54:33.890788-0500 SwagLeagues[1848:46123] [Error]: Attempted to change an objectId to one that's already known to the OfflineStore. className: UserRelationship old: (null), new: UandhrZsEO
我想这就是问题所在。我不是100%确定,因为错误消息为现有的固定对象提供了一个(null)objectId
我已经一遍又一遍地阅读了关于固定的解析文档,我不知道如何处理这种情况。我已尝试先在用户关系
对象上使用.pin(使用名称:)
,然后在用户事件
对象上使用.pin(使用名称:)
。我知道这不是答案,但解析文档明确指出:
“启用本地数据存储有几个副作用,您应该知道。启用后,任何给定对象将只有一个实例。”
问题是:如果链接的affectedRelationship
已被锁定,我如何锁定新创建的UserEvent
对象?在尝试锁定UserEvent
对象之前,是否必须取消锁定UserRelationship
对象?我觉得这有点傻。谢谢
编辑1:
好吧,这越来越奇怪了。在对旧objectId显示错误消息(null)的原因进行更多研究的过程中,我发现了一些问题
我运行了一个简单的测试,尝试创建一个UserRelationship
对象,保存它,然后.pin()
它。它仍然在给我错误。逻辑如下:
UserRelationship()
对象UserRelationship()
对象UserRelationship()
会触发一个LiveQuery事件。created()
块Event.created()
块中,我使用PFQuery()
.pinted()
UserRelationship
将在事件.created()
块中显示它不在本地数据存储中,并尝试.pin()
将其删除。此时会发生以下错误:
2020-06-03 14:44:06.650707-0500 SwagLeagues[1378:21947] [Error]: Attempted to change an objectId to one that's already known to the OfflineStore. className: UserRelationship old: (null), new: BjFwzHD4s7
我进行了三重和四重检查,除了在Event.created()
块中,我不会对对象调用.pin()
。我能想到的唯一逻辑解释是,当我创建新的UserRelationship对象时,Parse在本地数据存储中添加了一种“占位符”对象,没有objectId。然后,该“占位符”对象与我试图.pin()
将对象后期保存到本地数据存储的尝试相冲突。这是非常令人困惑的
编辑2:
在做了一系列测试之后。。。。我开始得出一个我不喜欢的结论。在某些情况下,新对象被成功固定而没有问题,而在其他情况下,则会发生错误。导致此错误的“UserRelationship”对象似乎是那些关系以前存在于脱机存储中的对象,而它们存在的“ghost”导致了此错误
让我解释一下:
为了“刷新”离线存储以进行测试,我一直在从设备/模拟器上删除应用程序,假设这将完全清除应用程序存储的所有数据表。然后,我会在设备/模拟器上重建应用程序,假设我有新的、清晰的离线存储数据库表
情况似乎并非如此。删除应用程序是否不会完全销毁应用程序创建的任何脱机存储数据库表
编辑3:
我在模拟器中找到了“擦除所有内容和设置”的选项。我在模拟器上执行此操作,然后运行应用程序。错误仍然偶尔发生,但我现在知道问题不能归咎于删除/安装过程中存在的某种“重影表”。浏览此线程,看看是否有帮助。“那边有一些人们用过的变通方法,我自己也用过。我相信这会帮你解决问题。谢谢@TanzimChowdhury,我希望这是我逻辑上的一个错误:(我会检查一下)。
2020-06-03 14:44:06.650707-0500 SwagLeagues[1378:21947] [Error]: Attempted to change an objectId to one that's already known to the OfflineStore. className: UserRelationship old: (null), new: BjFwzHD4s7