2017-03-23 57 views
1

我一直在努力争取一段时间,我已经接近有一个功能性应用程序,所以把我的头发拉出来。我从Facebook图形请求中获得了一些基本信息,并将其从字典中提取出来。然后我使用prepareforsegue将名称传递给第二个视图控制器。我计划在各种不同场景中使用'姓名'作为唯一标识符。在两个视图控制器之间传递变量时出现错误Swift

不幸的是,我收到一个错误,我不知道如何解决:'类型'UIStoryboardSegue'的值没有成员'SecondViewController'。我已经在第二个视图控制器中声明了var:var destViewController:String!

任何指针将如此赞赏。我感到非常沮丧,因为在这个工作之前,我无法转向其他任何东西。

的代码是在这里:

let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager() 
     fbLoginManager.loginBehavior = FBSDKLoginBehavior.web 
     fbLoginManager.logIn(withReadPermissions:  ["public_profile","email"], from: self) { (result, error) -> Void in 
      if error != nil { 
       print(error?.localizedDescription) 
       self.dismiss(animated: true, completion: nil) 
      } else if (result?.isCancelled)! { 
       print("Cancelled") 
       self.dismiss(animated: true, completion: nil) 
      } else { 

     } 
    } 

    FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, relationship_status, gender, location, education"]).start(completionHandler: { (connection, result, error) -> Void in 
     if (error == nil){ 
      let fbDetails = result as! NSDictionary 
      print(fbDetails) 

      if let userDataDict = result as? NSDictionary { 
      let name = userDataDict["name"] as? String 

       func prepareForSegue(segue: UIStoryboardSegue!, sender: Any!) { 
        if (segue.identifier == "loginToHome") { 
         //Checking identifier is crucial as there might be multiple 
         // segues attached to same view 
         var destViewController = segue.SecondViewController as? SecondViewController; 
         destViewController.name = name 

         var bookUniverse = [String]() 

        } 


      } 

     } 
    } 

回答

0

你不应该把对FBSDKGraphRequest内SEGUE功能做准备。你应该把这个代替:

self.performSegueWithIdentifier("loginToHome", sender: self) 

而非只透过名字,为什么不能有,你可以通过第二视图控制器内的模型对象?如果你已经设置了名称,创建一个类变量并为其指定名称,然后将该类变量传递给第二个视图控制器。

func prepareForSegue(segue: UIStoryboardSegue!, sender: Any!) { 
       if (segue.identifier == "loginToHome") { 
        //Checking identifier is crucial as there might be multiple 
        // segues attached to same view 
        var destViewController = segue.SecondViewController as? SecondViewController; 
        destViewController.name = name 

        var bookUniverse = [String]() 

       } 
} 
+0

感谢您的回答。现在,我只是想抓住这个名字。如果我使用类,你的意思是这样的:class name { static let userName =“name” } –

+0

对不起,我有另一个问题,我很抱歉。我仍在学习。我在哪里放课。在第一个顶部?非常感谢! –

+0

所以你想要做的是在你的类实例化之下,你会这样做:fileprivate var someVariableName:String = name。那么你可以这样做:destViewController.name = someVariableName – Jay

相关问题