gpt4 book ai didi

php - 从 NURLSessions.sharedsessions().dataTaskWithRequest 传递请求数据

转载 作者:行者123 更新时间:2023-11-29 02:11:41 28 4
gpt4 key购买 nike

目标:

在用户界面的文本字段中键入一个数字。按“开始!”按钮(用户界面)和:1.文本字段中的数字作为 post 变量传递到 PHP 脚本(通过 NSURLSession..dataTaskWithRequest)。

2.PHP 脚本使用该变量作为对 MySQL 查询的一部分。

3.查询结果返回到iOS App

4.查询结果显示在 TextView 中(用户界面)

设置:

在 ViewController 类中,我编写了一个额外的函数“mysqlget(MyNum: Int)”,它将数字转换为我的 NSMutableURLRequest 的 HTTPBody。函数继续设置 NSURLSession,设置 dataTaskwithRequestTask 和“恢复”,即启动任务。

我的“走吧!”带有 @IBActon 设置的 touchupinside 按钮(也位于 ViewController 类中)具有代码:

1.检查文本域中输入的字符串是否为字符串

2.textfield不是数字时弹出警告

3.调用mysqlget函数传入textfield编号。

4.将 Textview.text(不是文本字段)更改为包含 dataTaskWithRequest 任务中的数据的变量。

问题:

The scope of the data variable inside dataTaskWithRequest is limited to inside the dataTaskwithRequest body. Even inside the mysqlget function, just after the myDataTask.resume() the variable no longer exists. So obviously, I cannot pass the variable back to my @IBAction Go! button.

失败的解决方案:

  1. 在我的 datataskwithrequest 上放置一个“-> NSString”而不是 void( block 应该在调用处理程序结束时终止)

  2. 将 mysqlget 设置为返回一个 NSString 并让 mysqlget 最后一行包含一个“return data_frominside_datataskwithrequest”——数据在请求之外不存在

  3. 尝试从 dataTaskWithRequest block 内部更新 Textview.text - 即使在顶部声明了 textview 的 @IBOutlet,当我尝试执行“textview.text = data”时,xcode 提示 -必须使用“ self ”。提示它看不到@IBOutlet?使用 self.textview.text 允许程序运行,但一旦到达该行就会崩溃。

  4. (我知道这通常是不好的)在 ViewController 之外声明一个全局变量并使 globalvariable = data。不知何故,该变量仍然为空。

我已经测试了代码,所有部分都可以在 myDataTask 中获取我需要的数据。我唯一不能做的就是将数据传输到 myDataTask 之外

原理图:

var attemptedGlobalVar: String = ""

class ViewController {
@IBOutlet myNum
@IBOutlet TextField

@IBAction GoClicked {
.
.
[code to validate myNum]
.
.
mysqlget(Int(myNum.text))
Textfield.text = data_I_need //nothing returns here

[This is where I want to process my "data_I_need"]
}

override func viewDidLoad {
[default stuff]
}

override func didReceiveMemoryWarning {
[default stuff]
}

func mysqlget(aNum: Int) {
[Setup NSURL]
[Setup POST string]
[Setup NSMutableURLRequest (HTTPMethod, HTTPBody)]

let myDataTask = NSURLSessions.sharedSession().dataTaskWithRequest (myRequest, completion handler: {(requestData, requestResponse, requestError) -> Void in
data_I_need = (NSString(data: requestData, encoding: NSUTF8StringEncoding))!

[data_I_need exists here]
[setting TextField.text = data_I_need xcode warns I need to use self.TextField.text]
}

myGetTask.resume()
[data_I_need is blank here]
}

}

简洁问题:

  1. 如何从 @IBAction GoClicked 的 myGetTask block 中获取 data_I_need?

抱歉问题太长。我只是想提供完整的背景。如果您想提出其他建议(希望作为我想要的行动的替代方案),请告诉我。本人编程经验有限,欢迎大家提出意见或建议。谢谢。

最佳答案

一种方法(还有很多其他方法):

// Somewhere outside of your "mysqlget":
func recordMyData(myString: NSString) {
// do whatever you want with myString here, it is now outside the closure
myTextField.text = myString
}

// Call the "recordMyData" method from inside the closure to pass the response to it
let myDataTask = NSURLSessions.sharedSession().dataTaskWithRequest(myRequest, completion handler: {(requestData, requestResponse, requestError) -> Void in
self.recordMyData(NSString(data: requestData, encoding: NSUTF8StringEncoding)!)
})

关于php - 从 NURLSessions.sharedsessions().dataTaskWithRequest 传递请求数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29227382/

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