登录facebook后触发segue

时间:2018-02-06 14:33:55

标签: ios swift facebook

我正在使用Facebook登录工作我的第一个应用程序,并且在我登录后无法触发。您的facebook登录触发正常并让我登录,然后我&# 39; m转储回登录VC。

我在这里触发了segue:

indeterminateDrawable

以下是我的其他FB登录方法:

func loginButtonDidCompleteLogin(_ loginButton: LoginButton, result: LoginResult) {

    switch result {
    case .failed(let error):
        print(error)
        break

    case .success(_,_,_):
        print("login succeeded!")
        self.performSegue(withIdentifier: "SearchVC", sender: self.user)

    case .cancelled:
        print("Canceled!")
    }
}

我的观点:

func facebookButtonClicked(sender: UIButton) {

    let loginManager = LoginManager()

    loginManager.logIn(readPermissions: [.publicProfile], viewController: self) { loginResult in

        switch loginResult {
        case .failed(let error):
            print(error)

        case .cancelled:
            print("User cancelled login")

        case .success(let grantedPermissions, let declinedPermissions, let accessToken):
            print("Logged in")
            self.getFBUserData()
        }
    }
}

func getFBUserData() {

    if FBSDKAccessToken.current() != nil {

        FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, email"]).start(completionHandler: { (connection, result, error) -> Void in

            if error == nil {
                self.userData = result as! [String : AnyObject]
                print(result!)
                print(self.userData)
            }
        })
    }
}

在我的App代表中:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "SearchVC", let searchVC = segue.destination as? SearchVC { 
        searchVC.user = sender as? User ?? User()
    }
}

segue在IB中连接,标识符为" SearchVC"

编辑:我最初尝试在FBSDKGraphRequest的完成块中执行segue,但它不会触发那里

我不是问如何执行segue,因为建议的重复问题表明

2 个答案:

答案 0 :(得分:3)

您应该在ci_events_page.py: stage: test type: test script: - xvfb-run --server-args="-screen 0 1920x1080x24" pytest --driver Chrome ci/ci_events_page.py -v 完成时调用performSegue方法。

FBSDKGraphRequest

答案 1 :(得分:0)

该项目被窃听。我有另一个不执行代码的segue以及其他一些杂项块。删除我的public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { ..... if (Settings.System.canWrite(this) == false) { // for first time, request user to grant file permission requestPermissions(new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE }, 3000 ); } else { // permission is already granted // start watching path & write to file for test watchPathAndWriteFile(); } } ..... ...... // This function does 2 things: // 1) watch path for files changes using "RecursiveFileObserver" // 2) write to a file for testing public void watchPathAndWriteFile() { // the following path depends on your Android device. On my system, it is: "/storage/emulated/0/" String path = Environment.getExternalStorageDirectory().getPath() + "/"; RecursiveFileObserver observer = new RecursiveFileObserver(path, this); // start watching the path observer.startWatching(); // if file "MyTestFile" not exist, new file is created. Else file is modified try { FileWriter out = new FileWriter(new File(Environment.getExternalStorageDirectory() + "MyTestFile")); out.write("my file content for test..."); out.close(); } catch (IOException e) { android.util.Log.e("writeStringAsFile", "Exception: " + e); } } // in "onCreate", user is prompted to grant file read / write permission // this function is invoked automatically after user allowed / denied permission @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case 3000: { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // user granted permission // start watching for path & write to file for testing. watchPathAndWriteFile(); } else { // user denied permission android.util.Log.e("Permission", "Denied"); } return; } } } 文件并重新创建它解决了所有问题