2010-07-04 27 views
-3

我的代碼出現問題,我無法弄清楚。我的Objective-C有什麼問題?

編輯:請更正此代碼。謝謝!

int stringLength = [theData length]; 
for (int i = 1; i <= stringLength; i++) { 
     unichar currentCharacter = [theData characterAtIndex:i]; 
     int currentCharacterCode = keyCodeForKeyString(currentCharacter); 
     CGPostKeyboardEvent((CGCharCode)0, (CGKeyCode)currentCharacterCode, true); 
     CGPostKeyboardEvent((CGCharCode)0, (CGKeyCode)currentCharacterCode, false); 
} 

- (int)keyCodeForKeyString:(unichar)keyString 
{ 
    if (strcmp(keyString, "a") == 0) return 0; 
    if (strcmp(keyString, "s") == 0) return 1; 
    if (strcmp(keyString, "d") == 0) return 2; 
    if (strcmp(keyString, "f") == 0) return 3; 
    if (strcmp(keyString, "h") == 0) return 4; 
} 
+1

怎麼回事?什麼是錯誤?它應該做什麼?我們不介意讀者...... – 2010-07-04 03:06:59

+0

它應該從一串字符運行'CGPostKeyboardEvent'(它模擬可可中的按鍵)。它應該在for循環中分割字符串,找到正確的密鑰代碼,然後將該密鑰代碼放入'CGPostKeyboardEvent'中。 Xcode說'初始化使得沒有投射的整數指針','找不到'-keyCodeForKeyString'方法。 – 2010-07-04 03:16:27

+2

它只能在OSX上運行,這就是問題所在! – 2010-07-04 03:48:16

回答

3

首先,characterAtIndex是零索引。因此,您從數據的第二個字符開始,並且(假設theDatatheString具有相同的長度)讀取一個末尾(這是未定義的行爲)。另外,characterAtIndex返回unichar,而不是指向字符的指針。你也在上調用keyCodeForKeyString 這個指針,當你應該把它作爲參數傳遞的時候。但是您可以更改keyCodeForKeyString以採用unichar,而不是一個字符的以null結尾的字符串。

+0

啊謝謝,我覺得[NSString長度]從1開始,但我沒有意識到characterAtIndex從0開始。謝謝。 什麼是unichar,我需要做什麼? – 2010-07-04 03:13:34

+0

「unichar」代表一個Unicode代碼單元。在內部,它是一個未簽名的短文。 '[NSString length]'不*從*開始。它可以是零,這意味着字符串是空的(並且不能調用characterAtIndex)。還記得零索引意味着最後一個字符是長度 - 1. – 2010-07-04 03:19:39

+0

我討厭看起來很煩人,但請你糾正代碼?我沒有得到任何地方。我會通過看到什麼是正確的來學習。這裏是我得到的... 'for(int i = 1; i <= stringLength; i ++){ \t \t \t unichar currentCharacter = [theData characterAtIndex:i]; \t \t \t int currentCharacterCode = keyCodeForKeyString(currentCharacter); CGPostKeyboardEvent((CGCharCode)0,(CGKeyCode)currentCharacterCode,true);}} (int)keyCodeForKeyString:(unichar)keyString { if(strcmp(keyString,「a」)== 0)return 0; (strcmp(keyString,「s」)== 0)return 1; ... ... '不知道爲什麼它不會格式化代碼... – 2010-07-04 03:26:31

3

這條線:

int currentCharacterCode = keyCodeForKeyString(currentCharacter); 

是一個問題。你似乎沒有一個叫做keyCodeForKeyString的函數。你確實有這個名字的方法,但是它的語法是

int currentCharacterCode = [self keyCodeForKeyString: currentCharacter]; 
//       ^^^^ I assume you are sending the message from the same object.