gpt4 book ai didi

ios - Swift - Segue 未传递正确的数据

转载 作者:行者123 更新时间:2023-11-29 01:10:26 25 4
gpt4 key购买 nike

在 swift 中相当新。目前,我有一个程序,点击一个按钮,我发出一个 NSURL 请求,获取该响应,解析 XML,并将我需要的数据存储到一个数组 [String] 中。按下这个按钮也可以作为一个 segue 进入一个 TableView Controller ,它将动态地填充来自数组的信息。

我所看到的是,在我的请求完成和响应被解析之前,正在发生 segue 并且下一个 VC 正在传递一个空数组。 (这一切都基于我在几乎每隔一行中插入的打印语句,以跟踪我的代码的执行情况)。

我怎样才能做到这一点,以便在我的响应被解析之前,segue 不会将我带到下一个 VC?

class start: UIViewController, NSURLConnectionDelegate, NSXMLParserDelegate  {

var timeArr:[String] = []
var url = "myurl.com"
@IBOutlet weak var get2: UIButton!
@IBAction func getAction(sender: UIButton) {


var request = NSMutableURLRequest(URL: NSURL(string: url)!)
httpGet (request) {
(data, error) -> Void in
if error != nil {
print(error)
mainInstance.arrivalArr.append("no arrival times")
} else {
self.beginParsing()
print(data)
}
}
}


func httpGet(request: NSURLRequest!, callback: (String, String?) -> Void) {
var session = NSURLSession.sharedSession()
var task = session.dataTaskWithRequest(request){
(data, response, error) -> Void in
if error != nil {
callback("", error!.localizedDescription)
} else {
var result = NSString(data: data!, encoding:
NSUTF8StringEncoding)!
self.data2 = data!
callback(result as String, nil)
}
}
task.resume()
}


func beginParsing()
{
posts = []
parser = NSXMLParser(data: data2)
parser.delegate = self
parser.parse()
}

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String])
{
element = elementName
if (elementName as NSString).isEqualToString("prd")
{
// more code
}
}

func parser(parser: NSXMLParser, foundCharacters string: String)
{
if element.isEqualToString("prdtm") {
//code

}
}

func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?)
{
if (elementName as NSString).isEqualToString("prd") {
if !title1.isEqual(nil) {
//code
}

//code
finalTimeStr = getTime(finalTimeStr)
timeArr.append(finalTimeStr)

}
}



func getTime (time: String) -> String{
var arrivalTime = time
//code to trim and format time here
var timeA = getTimeDiff(arrivalTime)
timeA = trimToMin(timeA)
return timeA
}



func trimToMin (timeToTrim : String) -> String {
var timeInMin = timeToTrim
//code to trim to minutes
return substring2
}

func getTimeDiff (time: String) -> String{
//code to find time difference
let ret = stringFromTimeInterval(diff)
return ret
}

func stringFromTimeInterval(interval: NSTimeInterval) -> String {
//code to format interval
return String(format: "%02d:%02d:%02d", hours, minutes, seconds)
}


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let CDview = segue.destinationViewController as? ListView {
CDview.timeArr = timeArr
//CDview.timeArr = mainInstance.arrivalArr
}
}


override func viewDidLoad() {
super.viewDidLoad()
}

override func viewWillAppear(animated: Bool) {
timeArr = testArr

}

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

}不知道我哪里出错了。这特别令人困惑,因为如果我使用硬编码字符串并直接跳转到 getTimeDiff,那么它工作得非常好,我在下一个 VC 上的 TableView 看起来也很棒。将不胜感激任何帮助。在过去的 12 个小时里,我确实移动了这段代码,试图理解为什么它不起作用。

最佳答案

在 Storyboard 中添加来自 View Controller (而不是 UIButton)的 Segue。并将其命名为您想要的名称( Storyboard标识符)。解析数据后,使用 PerformSegue(...) 以编程方式执行 segue。

关于ios - Swift - Segue 未传递正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35825223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com