當使用NSObject valueForKey:
作爲布爾類型屬性(來自其他人的示例代碼here)時,返回的NSNumber不是@encode(BOOL) = "c"
- 它是「一世」。爲什麼?關鍵值編碼:BOOL屬性評估爲類型「i」,而不是「c」的NSNumber
0
A
回答
2
BOOL
不是基本類型,它是signed char
的typedef。因此,在運行時不可能判斷一個屬性是布爾值還是隻是一個整數值。因此,我們可以確定-valueForKey:
未使用+numberWithBool:
來包裝該值。所以問題是,爲什麼不使用+numberWithChar:
?可能爲了簡單起見。如果所有帶符號整數值< = sizeof(int)
都使用+numberWithInt:
打包,則不會令我感到意外。真正的問題是,它爲什麼重要?如果您詢問產生的NSNumber
對象-boolValue
,您將得到正確的答覆。
-1
這是從鏈接網站的代碼:
MyClass *c = [[MyClass alloc] init];
c.aaa = YES;
NSNumber *n = [c valueForKey:@"aaa"];
NSString *s = [NSString stringWithCString:[n objCType] encoding:NSUTF8StringEncoding];
NSLog(@"ObjC type - %@", s); // Prints 'i' instead of 'c'
這似乎是您正在使用[n objCType];
時,由於n
要求的objCType
n
是NSNumber
,就會得出這樣i
是結果而不是c
。
+0
'NSNumber'不一定有'i'類型。 – 2012-02-08 20:08:27
相關問題
- 1. 字段評估爲值(0.0),而不是類型SHORT-FLOAT
- 2. 評估「值」屬性
- 3. Objective-C這個類不是關鍵值findContact的關鍵值編碼。
- 4. 爲什麼PyRun_String不評估bool文字?
- 5. 這個類不是關鍵值編碼兼容的關鍵scrollView
- 6. 該類不是關鍵值編碼兼容的關鍵tableView
- 7. 爲什麼Where-Object會評估源對象上的所有*屬性而不是相關的屬性?
- 8. C++ - 數據類型不同地評估
- 9. 該類不是鍵值編碼兼容的關鍵問題
- 10. 我應該使用NSNumber而不是基本的C號碼類型嗎?
- 11. 類不是關鍵值編碼兼容的不存在的IBAction
- 12. 帶鍵值編碼和BOOL的JSONKit
- 13. 是否有任何情景(i!= i)會被評估爲真?
- 14. C#可爲空類型和值屬性
- 15. Xcode6 Beta6:這個類不是鍵值編碼兼容的名爲「IBtextFieldName」關鍵
- 16. 使用表達式樹來評估泛型類的屬性
- 17. 不是關鍵值編碼兼容
- 18. 錯誤而與sortedArrayUsingDescriptors排序:「類不是密鑰值編碼兼容的關鍵」
- 19. 類型錯誤:不確定是不是(評估「新viewClass類()」)
- 20. 對象屬性的變量數據類型而不是屬性值?
- 21. 評估動態屬性
- 22. 重新評估ModelState.IsValid屬性
- 23. 這個類是不符合編碼的關鍵值
- 24. NSUnkownException:這個類不是關鍵值編碼兼容的關鍵piewTextField
- 25. 這個類不是關鍵值編碼兼容的關鍵連接查看:JSQMessagesViewController
- 26. Google+這個類別不是關鍵值編碼兼容的關鍵showCircleCount
- 27. Xcode「這個類不是關鍵頁面控件的關鍵值編碼。」
- 28. swift 3這個類不是關鍵值編碼兼容的關鍵startDate
- 29. 如何訪問BOOL類型屬性?
- 30. NSNumber類型的託管屬性?未初始化爲零
這個問題大多隻是教學法,但是我在測試'@encode(BOOL)'和'NSNumber objCType'時發現它沒有按預期工作。我不知道使用C99 bool會有什麼結果?根據[docs](https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html),有一種專門用於這種形式的bool的特殊類型。 – Stephen 2012-02-08 20:33:31
@Stephen:好問題。儘管'NSNumber'似乎沒有C99'bool'的任何初始值設定項,所以我期望它使用> ='sizeof(bool)'的整數類型之一,例如'int'。 – 2012-02-08 20:35:49