我一直在学习swift并编写了一些代码来处理一个字符串,直到几天前我还在构建一些额外的场景然后它停止工作。由于我的UITEXTFIELD返回nil但似乎无法解决问题,我似乎收到了错误。
目前的代码只是取一个变量并将其拆分到相关部分,并显示在文本字段中,用户可以在提交之前进行编辑。目前我只使用固定变量,但后来的想法是用户可以输入一个唯一的变量进行处理。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
updateUI()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBOutlet weak var FirstNameResponse: UITextField!
@IBOutlet weak var LastNameResponse: UITextField!
@IBOutlet weak var BookingRefrenceResponse: UITextField!
@IBOutlet weak var DepartureAirportResponse: UITextField!
@IBOutlet weak var DestinationAirportResponse: UITextField!
@IBOutlet weak var AirlineResponse: UITextField!
@IBOutlet weak var DateResponse: UITextField!
@IBAction func FakeAScan(sender: AnyObject) {
var QRData = "M1ATILLA/KARACADAG REFNUM LGWDLMTCX2222 086Y004D0091 147>1182"
}
func updateUI() {
FirstNameResponse.text = FirstName
LastNameResponse.text = LastName
BookingRefrenceResponse.text = BookingREF
DepartureAirportResponse.text = Departure
DestinationAirportResponse.text = Destination
AirlineResponse.text = Airline
DateResponse.text = JulianDate
}
}
extension String {
var condensedWhitespace: String {
let components = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
return components.filter { !$0.isEmpty }.joinWithSeparator(" ")
}
}
// remove extra spaces
var QRData = "M1TODD/ANNABEL HYUWRA LPALGWTOM4681 086Y004D0091 147>1182 6074BTOM000000000000029754010916488701 ".condensedWhitespace
// split in to arrays based on spaces
var QRBreakup = QRData.componentsSeparatedByString(" ")
var Part1 = QRBreakup[0]
var BookingREF = QRBreakup[1] // Passenger booking refrence
var Part3 = QRBreakup[2]
var Part4 = QRBreakup[3]
// Remove Format & Leg code
var Part1startIndex = Part1.startIndex.advancedBy(2)
var NMSURNM = Part1.substringFromIndex(Part1startIndex)
// Seperate First & Last name
var NAME = NMSURNM.componentsSeparatedByString("/")
var LastName = NAME[0]
var FirstName = NAME[1]
// Seperate Departure Airport, Destination Airport, Airline & Flight number
var Part3temp = Part3 as NSString
var Departure = Part3temp.substringWithRange(NSRange(location: 0, length: 3))
var Destination = Part3temp.substringWithRange(NSRange(location: 3, length: 3))
var Airline = Part3temp.substringWithRange(NSRange(location: 6, length: 3))
var FlightNum = Part3temp.substringWithRange(NSRange(location: 9, length: 4))
// Seperate Date, Cabin, Seat
var Part4temp = Part4 as NSString
var JulianDate = Part4temp.substringWithRange(NSRange(location: 0, length: 3))
var Cabin = Part4temp.substringWithRange(NSRange(location: 3, length: 1))
var Seat = Part4temp.substringWithRange(NSRange(location: 4, length: 4))
这可能不是编写此脚本的最干净或最好的方法,而只是尝试在此刻进行实验,因此我们将非常感谢您的帮助。
修改 感谢所有评论到目前为止。以下是基于我理解和可以回答的更多信息。
错误:
在线updateUI() 线程1:EXC_BAD_INSTRUCTION(代码= EXC_l386_INVOP,子代码= 0x0)
self BoardPassReader.ViewController 0x00007fbd58480770
UIKit.UIViewController UIViewController
FirstNameResponse UITextField!没有
LastNameResponse UITextField!没有
BookingRefrenceResponse UITextField!没有
DepartureAirportResponse UITextField!没有
DestinationAirportResponse UITextField!没有
AirlineResponse UITextField!没有
DateResponse UITextField!无无
其他信息
@Duncan C. 当我在寻找解决方案时,我确实读过关于破损的出口链接。再次检查,他们都显示连接在"引用奥特莱斯"在每个UITextField上。 至于视图控制器的加载方式,如果我理解正确,它来自故事板。
在介绍更多场景之前,这一切似乎都有效。我还将所有其他场景设置为相同的ViewController类。
从错误中暗示它是因为.text值返回了一个" nil"值。我想知道这是不是因为它试图在我的脚本中完成拆分并将值分配给" FirstName"但是,这仍然无法解释为什么它之前有效。
希望额外的信息有所帮助。
答案 0 :(得分:0)
您的出口链接很可能很糟糕。如果在IB中打开故事板,请选择视图控制器对象,并显示连接检查器,它将显示视图控制器中定义的所有视图对象以及任何有效的插座连接。
P.S。当您提出问题时,您应该发布问题的全面,完整的描述并提供所有相关信息。在这种情况下,我们需要知道准确的错误消息,生成它的行,并且我们需要知道有关如何加载视图控制器的信息。它是从故事板还是笔尖加载的?这些网点是如何建立的?