PFUser currentUser 未保存在 iOS7

PFUser currentUser not saving in iOS7

我正在使用下面的代码来保存当前登录的用户和自定义字段。我让用户填写信息然后保存。我使用 GCM 在我自己的线程上使用了这两种保存方法,并使用了 saveInBackgrounWithBlock。在 iOS8 上,这工作正常,但在 iOS7 上,保存永远不会发生,并且永远不会调用完成块。有任何想法吗?谢谢

       if PFUser.currentUser() != nil {
            PFUser.currentUser().setObject(installation, forKey: "installation")
            PFUser.currentUser().saveInBackgroundWithBlock({ (bool: Bool, error: NSError?) -> Void in
                if(error != nil) {
                    let alert = UIAlertView(title: "Problem Saving", message: "Make sure you are connecte to the internet and try again", delegate: nil, cancelButtonTitle: "OK")
                    alert.show();
                }
            })
        }

更新 1: 我注意到删除应用程序可以暂时解决问题。但是,在注销并用其他用户登录后(即更改当前用户),问题会再次弹出。

更新 2: 这个问题似乎是由 PFInstallation 以某种方式引起的。使用 addUniqueObject 会导致问题。调用此方法后,任何保存都将停止工作 iOS7。即使在 PFUser 上。 PFUser 具有安装设置,反之亦然。它们的数组。

更新 3: 似乎它不仅仅是 addUniqueObject,而是 PFInstallation.currentInstallation 上的任何 setObject。求助!

您还应该检查您的第一个参数 (isSuccess):

if (bool == YES && error != nil) -> success
else -> failure

我花了很长时间才意识到,尽管我从未真正找到问题本身的解决方案,但我找到了解决方法。我将 currentUser 保存在 currentInstallation 中,将 currentInstallation 保存在 currentUser 中。这在保存时引起了问题。我还通过直接发送通道数组而不是使用 addUniqueObject 在 currentInstallation 上保存了通道。

    let installation = PFInstallation.currentInstallation()
    installation.channels = channels;
    installation.saveInBackground()