2015-12-03 315 views
0

僅供參考:1)不是Obj-C開發者。第二)所有我可以找到關於無法識別的選擇器的參考文獻涉及過度釋放,參考問題,...但這個庫不使用ARC ...[__NSCFNumber UTF8String]:無法識別的選擇器/將NSCFNumber轉換爲字符串

我通過FOUNDATION_EXPORT函數返回各種AppleScript結果到單聲道/ C#和所有輸入/輸出參數,int,數組,字符串等的編組。工作正常。

當我從executeAppleEvent一個AppleScript故障,NSDictionary中包含多個條目,我的NSLog他們,並通過只返回NSAppleScriptErrorBriefMessage給調用者:

strncpy(scriptReturn, ([executionError[@"NSAppleScriptErrorBriefMessage"] UTF8String]), 254); 

這一切工作正常,但如果AppleScript的失敗關於失蹤的功能名稱,基於錯誤的NSDictionary 包含一項內容(相對於正常的四個錯誤鍵/名稱對):

{ 
    NSAppleScriptErrorNumber = "-1708"; 
} 

,因爲我沒有NSAppleScriptErrorBriefMessage回來,我想返回錯誤值(作爲一個字符串),並通過將它的更多信息:

strncpy(scriptReturn, ([executionError[@"NSAppleScriptErrorNumber"] UTF8String]), 254); 

我得到一個NSInvalidArgumentException

'NSInvalidArgumentException', reason: '-[__NSCFNumber UTF8String]: unrecognized selector sent to instance 

我已經各種數字轉換,NSString分配等,但總是得到一個「__NSCFNumber」相關的錯誤。

如何將其轉換爲NSString(或?),以便我可以將strlcpy錯誤號作爲字符串輸出到out參數緩衝區中? (什麼是__NSCFNumber?)。

回答

2

根據錯誤,該字典包含一個NSNumber對象,而不是NSString

我會做這樣的事情,以確保(這使得它更容易閱讀和調試):

NSNumber *number = executionError[@"NSAppleScriptErrorNumber"]; 
NSString *string = [number stringValue]; 
strcpy(scriptReturn, [string UTF8String]); 
+0

平視>臺,平視>臺......工作正常這種方式,試圖在'strlcpy'中做一個單行的轉換已經打敗了我...非常感謝你!... – SushiHangover

+0

它可以在一行上完成,但我從來沒有理解要使代碼更難以達到通過將太多嵌套的方法調用壓入一行來讀取和調試。 – rmaddy

+0

我同意,通常會把它分解成步驟,但我只是假設有一些魔術選擇器foo,我不明白這是錯誤的原因,不像'NSNumber'那麼簡單。 。 再次感謝。 – SushiHangover

相關問題