gpt4 book ai didi

macos - 自定义 NSFormatter swift 返回 nil

转载 作者:IT王子 更新时间:2023-10-29 05:42:42 24 4
gpt4 key购买 nike

我在 Swift 中有一个 NSFormatter,它附加到 NSTextField。它可以防止输入非法字符,但是当我尝试访问下一个字段的值时,它给出了一个 nil 值。

下面是类:

class PSEntryNameFormatter : NSFormatter {
override func stringForObjectValue(obj: AnyObject?) -> String? {

if obj == nil {
println("stringForObjectValue: obj is nil, returning nil")
return nil
}
if let o = obj as? String {
println("stringForObjectValue: obj is string, returning \(o)")
return o
}

println("stringForObjectValue: obj is not string, returning nil")
return nil
}

override func getObjectValue(obj: AutoreleasingUnsafeMutablePointer<AnyObject?>, forString string: String, errorDescription error: AutoreleasingUnsafeMutablePointer<NSString?>) -> Bool {
println("getObjectValue: \(string)")
let obj = string
return true
}

override func isPartialStringValid(partialString: String?, newEditingString newString: AutoreleasingUnsafeMutablePointer<NSString?>, errorDescription error: AutoreleasingUnsafeMutablePointer<NSString?>) -> Bool {
if let s = partialString {
var illegals : String = join("",s.componentsSeparatedByCharactersInSet(PSEntryNameFormatterCharacterSet))
var goods = s.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString: illegals))
let newString : NSString = join("", goods)

if String(newString) == s {
println("isPartialStringValid: partial string ok")
return true
}
}

println("isPartialStringValid: partial string bad")
return false
}
}

这是我尝试访问的方式:

func control(control: NSControl, textShouldEndEditing fieldEditor: NSText) -> Bool {
println("Text should end editing")
if (control == nameTextField) {
var name = nameTextField.objectValue as String
setObjectName(name)
}
return true
}

为了调试,我添加了 println 语句,这是当文本字段设置为"template"然后我删除两个字符时发生的情况:

stringForObjectValue:  obj is string, returning Template
stringForObjectValue: obj is string, returning Template
isPartialStringValid: partial string ok
getObjectValue: Templat
isPartialStringValid: partial string ok
getObjectValue: Templa

然后我按下回车键:

getObjectValue: Templa
Text should end editing
getObjectValue: Templa
stringForObjectValue: obj is nil, returning nil
getObjectValue:
stringForObjectValue: obj is nil, returning nil
stringForObjectValue: obj is nil, returning nil
fatal error: unexpectedly found nil while unwrapping an Optional value

然后当我转换为字符串时它在线上崩溃了。显然我可以防止崩溃,但首先我想找出它返回 nil 的原因。非常感谢任何帮助!

最佳答案

问题出在您的 getObjectValue 函数中。

您应该以这种方式分配值:

obj.memory = string

代替

let obj = string

关于macos - 自定义 NSFormatter swift 返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26590729/

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