目前的SDK当新注册用户成功后,在Unity客户端该用户会自动登录,然而用var objId = AVUser.CurrentUser.Get<AVObject>("Obj1").ObjectId;
时会出错,提示:
KeyNotFoundException: The given key was not present in the dictionary.
System.Collections.Generic.Dictionary`2[System.String,System.Object].get_Item (System.String key) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:150)
LeanCloud.AVObject.get_Item (System.String key)
LeanCloud.AVObject.Get[AVObject] (System.String key)
...
Obj1是指向另一个表Obj1的pointer。这个关系的设置是在Hook函数中设置的,当用户注册时(创建User数据时)新增该pointer数据并save():
@engine.after_save('_User')
def after_save_User(user):
略
这时如果退出该用户登录,然后重新登录,再调用以上代码,才会成功。
我猜测可能是因为SDK在用户注册新帐号并自动登录成功后,并没有fetch _User表的数据;或者是当fetch时,服务器端hook的函数还没执行完,导致fetch的数据不包含该pointer的最新数据(另外请问这部分fetch的数据是否在本地缓存了?因为发生这个情况后停止运行然后重新运行,不做登出、登录、注册等操作,这时登录的仍是上次运行时注册的新帐号,然后调用var objId = AVUser.CurrentUser.Get<AVObject>("Obj1").ObjectId;
时仍然有这个问题)。
或者说,如何能在用户注册新帐号后,保证在执行完毕一系列耗时操作之后,才让客户端得到最新的数据并自动登录?
请问应该如何解决?谢谢!