0

テキストtextfieldフィールドviewcontrollernil.

私はとても立ち往生しています。JSONを読み取る私のクラスは次のとおりです。

class DoOAuth
{
func doOAuthFitbit() -> String{
    var name = ""
    let oauthswift = OAuth1Swift(
        consumerKey:            "eabf603efe9e45168d057b60b03f8e94",
        consumerSecret:         "46b4dfa8c9d59666769e03f887d531a8",
        requestTokenUrl:        "https://api.fitbit.com/oauth/request_token",
        authorizeUrl:           "https://www.fitbit.com/oauth/authorize?display=touch",
        accessTokenUrl:         "https://api.fitbit.com/oauth/access_token")

    oauthswift.authorizeWithCallbackURL( NSURL(string: "fitbit://oauth")!,
        success:{
            credential, response in

            let vc: ViewController = ViewController()


            let user: OAuthSwiftClient = OAuthSwiftClient(consumerKey: oauthswift.consumer_key, consumerSecret: oauthswift.consumer_secret, accessToken: credential.oauth_token, accessTokenSecret: credential.oauth_token_secret)

            let object:[String : AnyObject] = ["oauth_token": credential.oauth_token, "oauth_token_secret" : credential.oauth_token_secret]

            user.get("https://api.fitbit.com/1/user/-/profile.json", parameters: object,
                success: {

                    (data: NSData, response: NSHTTPURLResponse) -> Void in
                    let jsonValues = JSON(data: data, options: NSJSONReadingOptions.AllowFragments, error: nil)
                    println(jsonValues)

                    /*public var dictionary: [Swift.String: JSON]?
                    {
                        switch self
                        {
                        case .Dictionary(let d):
                            var jsonObject: [Swift.String: JSON] = [:]
                            for(k,v) in d
                            {
                                jsonObject[k] = JSON.wrap(v)
                            }
                            return jsonObject
                        default:
                            return nil
                        }
                    }*/

                    for(key, subJson) in jsonValues
                    {
                        if let nm = subJson["fullName"].string
                        {
                            println("\(nm)")

                            name = nm
                        }
                    }

                    /*for(index: String, subJson: JSON) in jsonValues
                    {
                        let name = subJson.dictionary?["fullName"]?.string

                        println("\(name!)")
                        //vc.nm.text = name!
                        main.acceptJson(name!)

                    }*/
                },
                failure: {
                    (error:NSError!) -> Void in
                    println(error.localizedDescription)
                    println("error")
            })
        },
        failure: {
            (error:NSError!) -> Void in
            println(error.localizedDescription)
    })
    return name
}

}

acceptJson次のビュー コントローラーにある JSON 文字列 ( ) を受け取る関数を呼び出します。

class mainMenu: UIViewController
{
var oauthfitbit: DoOAuth = DoOAuth()
var name = ""

//let vc: ViewController = ViewController()

@IBOutlet weak var lbl: UILabel!
@IBOutlet weak var nameField: UITextField!{
    didSet{
        nameField.text = name
    }
}



 override func viewWillAppear(animated: Bool)
 {
        //name = oauthfitbit.doOAuthFitbit()
        //self.nameField.text = "Working"
        //self.nameField.text = name
 }

func acceptJson(info: String!)
{
    println("\(info)")
    self.nameField.text = info
    //name = info

}

}

nameField.text設定行に例外がスローされ、nameFieldis nil. textfieldJSON 文字列を格納するにはどうすればよいですか?
そして、これが最初のView Controllerです:

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBOutlet weak var nm: UITextField!
//let main: mainMenu = mainMenu()

var name = ""
@IBAction func connectPressed(sender: UIButton)
{
    var oauthFitbit: DoOAuth = DoOAuth()
    name = oauthFitbit.doOAuthFitbit()
    self.performSegueWithIdentifier("loginSuccess", sender: nil)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if (segue.identifier == "loginSuccess")
    {
        let controller = segue.destinationViewController as! mainMenu
        controller.name = name
        //vc.nameField.text = "Hello"

    }
}

}

4

2 に答える 2