- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目标:
在用户界面的文本字段中键入一个数字。按“开始!”按钮(用户界面)和: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.
失败的解决方案:
在我的 datataskwithrequest 上放置一个“-> NSString”而不是 void( block 应该在调用处理程序结束时终止)
将 mysqlget 设置为返回一个 NSString 并让 mysqlget 最后一行包含一个“return data_frominside_datataskwithrequest”——数据在请求之外不存在
尝试从 dataTaskWithRequest block 内部更新 Textview.text - 即使在顶部声明了 textview 的 @IBOutlet,当我尝试执行“textview.text = data”时,xcode 提示 -必须使用“ self ”。提示它看不到@IBOutlet?使用 self.textview.text 允许程序运行,但一旦到达该行就会崩溃。
(我知道这通常是不好的)在 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]
}
}
简洁问题:
抱歉问题太长。我只是想提供完整的背景。如果您想提出其他建议(希望作为我想要的行动的替代方案),请告诉我。本人编程经验有限,欢迎大家提出意见或建议。谢谢。
最佳答案
一种方法(还有很多其他方法):
// 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/
是什么让它“共享”?我正在学习 Swift iOS 开发类(class),这个问题不断出现。在粗略的网络搜索中,我可以看出 NSURLSession.sharedSession() 是 NSURLSe
有人知道[NSURLSession sharedSession]的超时配置是什么吗? 我正在调试,这些信息会很有帮助。 编辑 显然我的问题不清楚(!)。我不是在问如何更改超时。我问的是默认值是多少。所
我遇到了一个非常奇怪的问题。 我正在像这样使用 session.DataTaskWithURL: let task = session.dataTaskWithURL(url!, comple
当我想将 mysql 数据库中的数据填充到类对象中时,我的问题出现了。我试图返回一个对象数组,它返回 nil,然后它以某种方式填充自己。在返回空白数组之前如何使其填充? 这是我的代码和代码输出的屏幕截
我现在正在开发一个小型应用程序,我需要连接到一些网站才能获取一些信息。 这是我做的函数,90%的情况下可以满足我的需求。 func requestFunctionOn(url: String) {
我为 NSURLSession 创建了类别,然后我遇到了一个问题。在 iOS 7 中,[[NSURLSession sharedSession] isKindOfClass:[NSURLSession
我需要将自定义用户代理字符串设置为 NSURLSession 的 sharedSession。即每当我调用 [NSURLSession sharedSession] 时,它默认包含我的自定义配置,我不
class PostFOrData { let url = NSURL( string: "http://210.61.209.194:8088/SmarttvWebServiceTopmso
class PostFOrData { let url = NSURL( string: "http://210.61.209.194:8088/SmarttvWebServiceTopmso
class PostFOrData { let url = NSURL( string: "http://210.61.209.194:8088/SmarttvWebServiceTopmso
class PostFOrData { let url = NSURL( string: "http://210.61.209.194:8088/SmarttvWebServiceTopmso
class PostFOrData { let url = NSURL( string: "http://210.61.209.194:8088/SmarttvWebServiceTopmso
class PostFOrData { let url = NSURL( string: "http://210.61.209.194:8088/SmarttvWebServiceTopmso
目标: 在用户界面的文本字段中键入一个数字。按“开始!”按钮(用户界面)和:1.文本字段中的数字作为 post 变量传递到 PHP 脚本(通过 NSURLSession..dataTaskWithRe
我在使用 NSURLSession.sharedSession().dataTaskWithRequest(request) 时遇到问题。我想根据某些 API 对我的应用程序进行身份验证,如果身份验证
class PostFOrData { let url = NSURL( string: "http://210.61.209.194:8088/SmarttvWebServiceTopmso
为什么没有打印任何结果? 我一直在寻找答案。我尝试了许多不同的示例代码块。除非产生错误,否则打印语句永远不会触发。例如:如果我仅将 URL 更改为“http”,而没有其他任何内容,我自然会收到错误并打
我有一段代码可以从 php 返回的 Json 中获取员工数据,如下所示: [{"id":"1","email":"KK","password":"KKK","firstName":"KKK","las
我是 iOS World 的新手。当我看到下载文件的方法时。我看到这段代码: // create url let imageURL = NSURL(string: Co
我正在尝试执行 2 个 HTTP 请求在第一个请求中,我将获得一个将在第二个请求中使用的 var。我的问题是,当我使用下面的代码执行此操作时,它只运行第二个请求而没有运行第一个请求。 let
我是一名优秀的程序员,十分优秀!