0

我正在编写一个应该通过 UDP 控制 Arduino 的简单应用程序。我做了两个视图: - 一个用于控制 (ViewController.h/cpp) - 一个用于设置,尤其是 Arduino 的主机名。(设置.h/cpp)

在设置视图中是一个文本字段和一个开关。如果设置了开关,则应覆盖主机名。

主机名在 ViewController.h 中声明如下:

extern const char *host_name;

在 ViewController.m 中:

const char *host_name = "WIZnetccef3";

为了在设置视图的文本字段中显示它,我使用了 viewDidLoad 函数:

textfield.text = [[NSString alloc]initWithUTF8String:host_name];

对视图的更改工作正常。将显示主机名“WIZnetccef3”。

如果我改变滑块的位置,如果开关打开,将执行以下代码:

const char *hname = [textfield.text UTF8String];

host_name = hname;

但是当我切换视图并返回设置时,不会显示新的主机名。文本字段为空或包含奇怪的字符。

这是我的问题,我不知道问题是什么。我构建了一些错误以找出我犯了错误的地方,但这没有帮助。

4

1 回答 1

1

你重新分配一个 CONST 值......我的 C 不是一流的,但我认为这是问题所在。此外,您不会复制文本字段的值,因此它可能无论如何都不会保持有效

尝试

extern char *host_name;

char *host_name = nil;

if(!host_name) {
    host_name = malloc(sizeof(char) * 12);
    strcpy(host_name, :@"Wzeeee...";
}
textfield.text = [[NSString alloc]initWithUTF8String:host_name];

free(host_name);
host_name = malloc(sizeof(char) * strlen(textField.text.UTF8String)+1);
strcpy(host_name, textField.text.UTF8String);
于 2013-03-18T09:02:45.963 回答