1

現在、Parse の奇妙な動作が発生しています。私のアプリは数週間の開発で問題なく動作し、プロジェクトのセットアップ以来、「NSInternalInconsistencyException」を発生させることはありませんでした。しかし、私は ProfileViewController に PFImageView を実装しました (UITabBarController の 2 番目の VC、したがって、ユーザーがログインしている場合にのみ表示されます)、私のアプリはこのエラーでクラッシュし続けます:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'You have to call setApplicationId:clientKey: on Parse to configure Parse.'

もちろん、Parse の設定をfunc application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool次の場所で確認しました。

    Parse.setApplicationId("myApplicationID", clientKey: "myClientKey")

    Parse.enableLocalDatastore()

    // This is where I used to activate Parse, but SO and Parse forums kept
    // saying you should try to do this at the very beginning

    ParseCrashReporting.enable()

    PFAnalytics.trackAppOpenedWithLaunchOptionsInBackground(launchOptions, block: nil)

私の ProfileViewController では、これが Parse からイメージをロードする場所です。

override func viewWillAppear(animated: Bool) {

    super.viewWillAppear(animated)

    userImageView.file = user["profilePicture"] as PFFile

    userImageView.loadInBackground { (image, error) -> Void in

        if error != nil {
            JSSAlertView().danger(self, title: "Loading Image Failed", text: "Please check your connection")
        } else {

            self.userImageView.image = image
        }
    }

}

画像のインスタンス変数の設定:

var image: UIImage? {

    // If User picked a new image, automatically update imageView
    didSet {

        userImageView.image = image

        // Convert image to PNG and save in in Parse-Cloud
        let imageData = UIImagePNGRepresentation(image)
        let imageFile = PFFile(name: "profilePicture.png", data: imageData)

        // Attach this file to our user
        user["profilePicture"] = imageFile

        user.saveInBackgroundWithBlock { (success, error) -> Void in

            if error != nil {

                JSSAlertView().danger(self, title: "Failed To Save Image", text: "Please try again saving your image!")
            }
        }


        userImageView.file = user["profilePicture"] as PFFile
    }

}

これらの間にどのような関係があるのか​​ わかりませんが、プロジェクト全体で他に何も変更しませんでした.

よろしく、

4

1 に答える 1

1

OK、最終的に何時間もの試行錯誤の末、この問題の解決策を見つけました。これらの呼び出しは API 登録の前に実行される可能性があるため、View Controller のヘッダーで parse 呼び出しを実行しないでください。

例えば:

class ViewController: UIViewController {

  // this will crash the app as above!
  var user: PFUser! = PFUser.currentUser()

  override func viewDidLoad() {
      super.viewDidLoad()

      // initialize the user here. This will work just fine
      user = PFUser.currentUser()
  }
}

これにより、同じエラーが発生するのを防ぐことができます!

于 2015-03-08T15:36:08.757 に答える