我最近向蘋果公司提交了一個關於這方面的錯誤報告,但是我想我會問這個問題,以防萬一我失去了一些明顯的東西。在Objective-C,下面呼叫能正常工作在64位系統上,但在32位的系統上拋出NSInvalidArgumentException:爲什麼setValue:forKey:在32位系統上失敗,但不是在64位?
[self setValue:@"true" forKey:@"flag"];
的 「標誌」 屬性是一個BOOL:
@property BOOL flag;
此外,呼叫在夫特/ 32位,其中該屬性是布爾正常工作:
var flag: Bool = false
類似地,這個調用中夫特正常工作在64位的系統上,但將引發NSInvalidArgumentException 32位的系統上(「不知疲倦x「是一個Int):
setValue("2", forKey: "index")
然而,它在Objective-C/32位,其中屬性是一個NSInteger正常工作。
我會希望這些調用能夠正常工作,而不管語言或處理器體系結構如何。有沒有人有任何洞察他們爲什麼不可以?
您發佈的代碼除了兩個字符串外沒有使用'BOOL'。您所發佈的代碼不會像您所描述的那樣導致任何錯誤。 – rmaddy
你可以給它更多的代碼示例,它的工作原理和不起作用?正如@rmaddy指出的那樣,你的代碼沒有顯示BOOL。 – brandonscript
「flag」屬性被定義爲BOOL。你不熟悉KVC嗎? –