Ios 如何在swift中将NSDictionary传递给下一个视图控制器

Ios 如何在swift中将NSDictionary传递给下一个视图控制器,ios,iphone,swift,nsdictionary,parameter-passing,Ios,Iphone,Swift,Nsdictionary,Parameter Passing,我想将NSDictionary变量传递给下一个视图控制器,但它不起作用。 我如何解决这个问题?这是我的src代码。 //... let vc = storyBoard.instantiateViewControllerWithIdentifier("SearchResultView") as SearchResultViewController vc.testId = index + 1 vc.testDict = testDataReturn(index + 1) self.navigatio

我想将NSDictionary变量传递给下一个视图控制器,但它不起作用。
我如何解决这个问题?这是我的src代码。

//...
let vc = storyBoard.instantiateViewControllerWithIdentifier("SearchResultView") as SearchResultViewController
vc.testId = index + 1
vc.testDict = testDataReturn(index + 1)
self.navigationController?.pushViewController(vc, animated: true)
//...
func testDataReturn(rid: Int) -> NSDictionary {
    var jsonResult: NSDictionary = NSDictionary()
    let urlPath: String = "[MY TEST SERVER]/test.php"
    var url: NSURL = NSURL(string: urlPath)!
    var request1: NSMutableURLRequest = NSMutableURLRequest(URL: url)

    request1.HTTPMethod = "POST"
    var stringPost="test_id=\(rid)" // Key and Value

    let data = stringPost.dataUsingEncoding(NSUTF8StringEncoding)

    request1.timeoutInterval = 60
    request1.HTTPBody=data
    request1.HTTPShouldHandleCookies=false

    let queue:NSOperationQueue = NSOperationQueue()

    NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in

        var err: NSError

        jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary

    })

    return jsonResult
}
testId:正常通过,但testDict:nil。
函数“testDataReturn”运行良好

class SearchResultViewController : UIViewController, UITableViewDataSource, UITableViewDelegate {
    var testId: Int = 0
    var testDict: NSDictionary = NSDictionary()
    // ...
    @IBOutlet weak var searchResultTableView: UITableView!
    // ...
    override func viewDidLoad() {
        super.viewDidLoad()
        self.searchResultTableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
        NSLog("testDict : \(testDict)") // nil
        // ...
    }
    // ...
}
为什么不使用

self.performSegueWithIdentifier("FirstToSecond", sender: dictionary)
在此方法中为第二个VC设置字典

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let id = segue.identifier
    if(id == "FirstToSecond"){
        var vc: AnyObject = segue.destinationViewController
        (vc as ViewController).setDictionaryMethod(sender)
    }
}
更新: 您可以使用自己的方式将字典传递给第二个VC,但您应该使用

var testDic : NSDictionary?
而不是

var testDic : NSDictionary = NSDictionary()

请注意,
NSURLConnection.sendAsynchronousRequest
是一个在后台执行的异步方法。当它执行
testDataReturn时
函数将持续到函数结束。因此,jsonResult将由
testDataReturn
函数返回为空

请从块内执行UI更新
NSURLConnection.sendAsynchronousRequest
。在块内移动导航代码,包括属性设置

NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in

    if error == nil
    {
        jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary

        dispatch_async(dispatch_get_main_queue(), { () -> Void in
            let vc = storyBoard.instantiateViewControllerWithIdentifier("SearchResultView") as SearchResultViewController
            vc.testId = index + 1
            vc.testDict = jsonResult
            self.navigationController?.pushViewController(vc, animated: true)


        })
    }
})

您是否检查了
testDataReturn()
函数是否返回非空值?是的,它返回的不是nil,但下一个视图的值为nil,该函数是同步调用显示代码,说明如何在
SearchResultViewController
中创建
testDict
变量,以及在何处尝试获取其值。var testDict:NSDictionary=NSDictionary()。。。我是这样宣布的。我是否搞错了初始化?我没有使用segue,因为它在地图区域包含不同的下一个视图。当I制表符位于(141250)时,它包括值1。然而,在(35172)处,它包括值13。所以我没有使用segue。相反,我使用了Tab手势识别器。你仍然可以使用segues然后发送正确的值。使用segue将内容传递给另一个VC是最干净的方法。请尝试使用
var testDict:NSDictionary?
而不是
var testDict:NSDictionary=NSDictionary()
感谢您教授“segue”的概念。在大多数情况下,我将使用segue而不是pushViewController方法。哦,我的错误。。。我忘了编辑我的异步调用。我检查了NSDictionary变量在编写同步调用后是否正常传递。谢谢。我解决了我的问题。