0

UDP経由でArduinoを制御する簡単なアプリを書いています。私は 2 つのビューを作成しました: - 制御用 (ViewController.h/cpp) - とりわけ Arduino のホスト名の設定用。(Settings.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 に答える