2012-10-08 57 views
0

今天我開始了一個簡單的項目,該項目應該將字符串轉換爲包含鍵碼的數組來模擬擊鍵。 我的問題是,我不能使用字符作爲一個字典的ID來將該字符轉換爲鍵碼。將字符串轉換爲包含鍵碼的數組

//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 

}

在最後一行我嘗試使用一個字符從第一陣列作爲ID的字典來獲得第二陣列的鍵碼。 我得到一個錯誤,我不能使用一個字符作爲一個ID,所以我需要一個是從一個字符得到鍵碼。 (我讀了這個網站的一些文章,但我didn`t真正理解they've完成) 謝謝您的回答 添

回答

0

你報告錯誤是向下行:

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

因爲@"%c",text[dnehmen]不會返回一個對象,而是由於使用相當模糊的C逗號操作符而產生的char值 - 逗號通常是分隔符,但也是一個運算符(如+等),它只返回第二個參數。所以,你得到一個錯誤指的是字符...

既然你已經使用NSString值鍵,你需要的是包含你的性格的字符串,你可能想鍵入:

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

雖然這將修復您現在有另一個問題的第一個問題,您的字典返回包含四個字符的NSString,並且您的代碼表明您希望由這四個字符表示的字節(char)在由編譯器解釋爲十六進制文字時表示...

此時你mi ght試圖通過將其解析爲十六進制數字來嘗試將字符串轉換爲字節值,但不應該這樣做。相反,首先將您需要的價值放入NSDictionary。這兩個對象在NSDictionary中使用的任何鍵都可以是任何 [1]類型的對象。你可能要考慮使用NSNumber這兩個對象。

希望這會使您在修復設計時走上正軌。

[1]那麼幾乎任何準確地說,任何具有平等和哈希方法 - 這實際上是從NSObject下降一切,所以不用擔心這個迂腐的細節吧!

相關問題