0

今日、キーストロークをシミュレートするために文字列をキーコード付きの配列に変換する単純なプロジェクトから始めました。私の問題は、辞書の id として char を使用して、その char をキーコードに変換できないことです。

//Declare a Dictionary
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];

//Add the Basic data for keycodes (i know that there are some missing)
[dictionary setObject:@"0x00" forKey:@"a"]; //a
[dictionary setObject:@"0x0B" forKey:@"b"]; // b
[dictionary setObject:@"0x08" forKey:@"c"]; //c
[dictionary setObject:@"0x02" forKey:@"d"]; // d
[dictionary setObject:@"0x0E" forKey:@"e"]; //e
[dictionary setObject:@"0x03" forKey:@"f"]; //f
[dictionary setObject:@"0x05" forKey:@"g"]; //g
[dictionary setObject:@"0x04" forKey:@"h"]; //h
[dictionary setObject:@"0x22" forKey:@"i"]; //i
[dictionary setObject:@"0x26" forKey:@"j"]; //j
[dictionary setObject:@"0x28" forKey:@"k"]; //k
[dictionary setObject:@"0x25" forKey:@"l"];//l
[dictionary setObject:@"0x2D" forKey:@"m"];//m
[dictionary setObject:@"0x2E" forKey:@"n"];//n
[dictionary setObject:@"0x1F" forKey:@"o"];//o
[dictionary setObject:@"0x23" forKey:@"p"];//p
[dictionary setObject:@"0x0C" forKey:@"q"];//q
[dictionary setObject:@"0x0F" forKey:@"r"];//r
[dictionary setObject:@"0x01" forKey:@"s"];//s
[dictionary setObject:@"0x11" forKey:@"t"];//t
[dictionary setObject:@"0x20" forKey:@"u"];//u
[dictionary setObject:@"0x09" forKey:@"v"];//v
[dictionary setObject:@"0x0D" forKey:@"w"];//w
[dictionary setObject:@"0x07" forKey:@"x"];//x
[dictionary setObject:@"0x10" forKey:@"y"];//y
[dictionary setObject:@"0x06" forKey:@"z"];//z

NSString *workwith = [_mess stringValue]; //Get String from Interface
long stringl = [workwith length]; //Get lenght of the String
int a = 0;
char text[stringl-1]; //make a array with the lenght of the string
while (a < stringl) { //fill this array with chars from the string
    text[a] = [workwith characterAtIndex:a];
    NSLog(@"%c",text[a]);
    a++;

}
char fmat[stringl-1]; //make a second char to fill it with keycodes
int dnehmen = 0;
while (dnehmen <= stringl-1) {
    fmat[dnehmen] = [dictionary objectForKey:@"%c",text[dnehmen]]; //stuck at this point

}

最後の行で、最初の配列の char を辞書の ID として使用して、2 番目の配列のキーコードを取得しようとしています。char を ID として使用できないというエラーが表示されるため、char からキーコードを取得する必要があります。(このサイトのいくつかの投稿を読みましたが、彼らが何をしたのかよくわかりませんでした) 回答ありがとう ティム

4

1 に答える 1

0

あなたが報告するエラーは次の行までです:

fmat[dnehmen] = [dictionary objectForKey:@"%c",text[dnehmen]];

as@"%c",text[dnehmen]は、オブジェクトではなくchar値を返します。これは、あまり知られていない C コンマ演算子を使用しているためです。コンマは通常、区切り文字ですが+、2 番目の引数を返すだけの演算子 (など) でもあります。そのため、文字を参照するとエラーが発生します...

値をキーとして使用NSStringした場合、必要なのは文字を含む文字列であり、おそらく次のように入力するつもりでした。

fmat[dnehmen] = [dictionary objectForKey:[NSString stringWithFormat:@"%c",text[dnehmen]]];

これで最初の問題は解決しますが、辞書は4文字を含むを返し、コードは、コンパイラによって16進数リテラルとして解釈されたときに、これらの4文字で表されるNSStringバイト( )が必要であることを示唆しています...char

この時点で、文字列を 16 進数として解析してバイト値に変換しようとする誘惑に駆られるかもしれませんが、そうすべきではありません。NSDictionary代わりに、最初に必要な値を に入れることを検討してください。で使用されるオブジェクトとキーはどちらも、任意の[1] タイプのオブジェクトにするNSDictionaryことができます。両方にオブ​​ジェクトを使用することを検討してください。NSNumber

うまくいけば、それがあなたのデザインを修正するための正しい軌道に乗るでしょう.

[1]正確に言うと、ほぼすべてのもの、等値メソッドとハッシュ メソッドを持つもの - 実際には、そこから派生するすべてのものNSObjectなので、今はこの衒学的な詳細について心配する必要はありません!

于 2012-10-08T18:53:08.210 に答える