2017-05-29 99 views
0

如何编写此内容以便在用户完成使用该字段(对于Cocoa?)时更新变量。其目的是允许用户为网络上的电视位置指定自定义IP地址。在更改Swift NSTextfield变量时更新

import Cocoa 
import Alamofire 

class ViewController: NSViewController, NSTextFieldDelegate { 

@IBAction func MenuButton(_ sender: NSButtonCell) { 
    triggerRemoteControl(irccc: "AAAAAQAAAAEAAABgAw==") 
} 
@IBAction func ReturnButton(_ sender: NSButton) { 
    triggerRemoteControl(irccc: "AAAAAgAAAJcAAAAjAw==") 
} 

...

@IBOutlet var IPField: NSTextField! // [A] Set by the user 

...

func triggerRemoteControl(irccc: String) { 
    Alamofire.request(IPField,  // [B] Goes here when it's updated. 
         method: .post, 
         parameters: ["parameter" : "value"], 
         encoding: SOAPEncoding(service: "urn:schemas-sony-com:service:IRCC:1", 
              action: "X_SendIRCC", IRCCC: irccc)).responseString { response in 
               print(response) 
    } 
} 


} 

- UPDATE

我想声明一个变量:

var IPString: String 

,然后(我的文本字段的委托设置为视图控制器,并放置在这个函数):

override func controlTextDidEndEditing(_ obj: Notification){ 
    let IPString = IPField.stringValue 
} 

即使使用“ - >字符串”,并返回符号仍然有它抱怨未使用的变量。我显然不太了解我的语法。

编译器也抱怨没有初始化ViewController。

+0

如果两个文本字段在同一个控制器中使用可可绑定 – vadian

+0

什么问题?触发器,如何获取文本字段的内容,设置变量,哪个变量或其他东西?描述你想要发生什么,哪一部分不起作用。 – Willeke

+0

Willeke,我试图让我评论的部分“[A]”接收文本并将其设置为“[B]”可用的变量。它目前不起作用。我不知道下一步该去哪里。 – yeeeeee

回答

1

你需要的是覆盖func controlTextDidEndEditing(_ obj: Notification)功能

你应该看看:

  • object(的obj属性) - 有时你想知道哪些对象发送你到底编辑操作。

  • userInfo(的obj属性) - 包含"NSTextMovement"键,它允许你定义用户如何做结束编辑。

override func controlTextDidEndEditing(_ obj: Notification){ let IPString = IPField.stringValue }

在这里,你正在创建新的常量。你需要的是这个值设置到类变量,因此你应该做IPString = IPField.stringValue

但它并不完全正确,因为func controlTextDidEndEditing(_ obj: Notification)可以从其他对象调用,所以首先你应该检查是否obj通知包含对象,发送例如,有警卫。

guard let object = obj.object else { return }

然后检查的对象是你的IPField与身份运营商

guard object === IPField else { return }

最后,你可以在你的字段值分配给您的IPString变种

IPString = object.stringValue

希望它会帮助你。哦,还有我的一个建议,你应该使用较低的骆驼命名约定为你的变量。

+0

我尝试设置一个变量,然后将文本框的委托设置为ViewController ...。 我试图定义一个变量: VAR IPString:字符串 ,然后使用这个(如你所说) 覆盖FUNC controlTextDidEndEditing(_ OBJ:通知){ 让IPString = IPField.stringValue } 而然后在Alamofire中调用该变量...但它不起作用。没有什么似乎为我工作。 错误:类ViewController没有初始化程序。还抱怨,不管我做什么,我不使用我的功能的结果,我应该使用“_”。 – yeeeeee

+0

尝试将'var IPString:String'更改为'var ipString:String?',并且它警告您将'let IPString = IPField.stringValue'的名称更改为'_ = IPField.stringValue',因为您在此创建新常量不要在任何地方使用它,所以命名这个让我们没有意义。我为你更新了帖子。 – Raymond

+0

我如何保护它免受零值?即设置一个默认的...... – yeeeeee