我正在尝试评估表单字段的内容,当为空时抛出错误。
这是出口代码
@IBOutlet var txtUsername : UITextField!
这是目标字段的println。
println("\(txtUsername)")
<UITextField: 0x10e8280a0; frame = (20 40; 280 30); text = ''; clipsToBounds = YES; opaque = NO; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x10e828b20>; layer = <CALayer: 0x10e828300>>
所以,看看这个我会假设txtUsername.text为空或==&#34;&#34;。但我尝试做的每件事都会引发错误。
if countElements(txtUsername.text as String) != 0 {
... code here
}
if txtUsername.text.bridgeToObjectiveC().length != 0 {
... code here
}
if txtUsername.text.utf16count != 0 {
... code here
}
if txtUsername.text != "" {
... code here
}
全部带回&#34; EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)
另外,评估它是否为零似乎不起作用。以下脚本显示有待评估的内容,即使它是空白的。问题在于告诉它是否为空白。
如果字段为nil,我希望它返回false并触发else语句。
if let evalText = txtUsername.text{
println("There is something here : \(evalText)")
} else {
println("text is nil")
}
// This returns "There is something here:"
if txtUsername.text{
println("There is something here")
} else {
println("text is nil")
}
// This returns "There is something here"
我甚至试图在变量中设置值,只是在点击&#34之后让它发出错误;如果&#34;言。
谢谢,
答案 0 :(得分:0)
EXC_BAD_INSTRUCTION
意味着断言失败。当某些内容为nil
时,这种情况最常见,但您仍在尝试对其进行操作。
text
的{{1}}属性为Implicitly Unwrapped Optional(UITextField
)。您必须先检查它是否为String!
。您的应用正在崩溃,因为它是nil
。
答案 1 :(得分:0)
txtUsername.text
在Swift中是可选的。即使您的标签是可选的,因此在声明时使用!
并不安全。但无论如何,尝试使用这个:
if let currentText = txtUsername.text {
// ... Do something with currentText ...
}
else {
NSLog("Text is nil")
}
要确保您甚至可以检查txtUsername
是否以相同的方式设置。所以最后你会得到这个:
if let currentTxtUsername = txtUsername{
if let currentText = currentTxtUsername.text {
// ... Do something with currentText ...
}
else {
NSLog("Text is nil")
}
}
else {
NSLog("Text label is nil")
}
不要忘记删除声明部分中的!
。
答案 2 :(得分:0)
原来是错误重影问题。
实际问题是它会在代码中进一步下降并遇到一种情况,即我无意中试图将核心数据对象中的nil数据放回文本字符串中。将文本字段设置为nil不起作用,而不是在出现问题的地方出错,而是在&#34; if&#34;声明在其上方20行。
以下是完整代码,以及该问题的一些描述。
@IBAction func btnLoad(sender : AnyObject) {
var appDel = (UIApplication.sharedApplication().delegate as AppDelegate)
var context = appDel.managedObjectContext
var request = NSFetchRequest(entityName: "Users")
request.returnsObjectsAsFaults = false
// Here is the place where it throws the error.
if txtUsername.text == "" {
request.predicate = NSPredicate(format: "username = %@", "\(txtUsername.text)")
}
var results = context.executeFetchRequest(request, error: nil)
println(results)
if(results.count > 0){
var res = results[0] as NSManagedObject
println("\(res)")
//*** The database had nil values for the result selected. And nil doesn't go into a text field.
txtUsername.text = res.valueForKey("username") as String
txtPassword.text = res.valueForKey("password") as String
responseLabel("User Found")
} else {
responseLabel("No Users Found")
}
}
感谢大家的回复。