實際上,我與境界Objective-C的工作分析NSInteger的,這裏是我的問題:境界目標C - 值爲零
我有一個Web服務,其返回此:
{
"id": 1,
"name": "Project 1",
"summary": "",
"description": "description project 1 ...",
"amountTargeted": 0,
"amountReached": 0,
"beginDate": 1432044917000,
...
...
}
當我嘗試使用這種方法來分析響應:
[Project createOrUpdateInDefaultRealmWithValue:projectDictionary];
我有這樣的錯誤:
'RLMException', reason: 'Invalid value '0' for property 'amountReached''
在我的項目,我宣佈的模型amourReached這樣的:
@property NSInteger amountReached;
我做了一些測試,而這個問題僅出現在值爲零。
我認爲問題都來自於這個方法誰返回false時,它的零:
static inline bool nsnumber_is_like_integer(NSNumber *obj)
{
const char *data_type = [obj objCType];
// FIXME: Performance optimization - don't use strcmp, use first char in data_type.
return (strcmp(data_type, @encode(short)) == 0 ||
strcmp(data_type, @encode(int)) == 0 ||
strcmp(data_type, @encode(long)) == 0 ||
strcmp(data_type, @encode(long long)) == 0 ||
strcmp(data_type, @encode(unsigned short)) == 0 ||
strcmp(data_type, @encode(unsigned int)) == 0 ||
strcmp(data_type, @encode(unsigned long)) == 0 ||
strcmp(data_type, @encode(unsigned long long)) == 0);
}
注:我補充一個斷點,並嘗試一些日誌:
(lldb) p number
(NSNumber *) $6 = 0x15e76f50 @"0"
(lldb) po number
0
(lldb) p nsnumber_is_like_integer(number)(why ???)
(bool) $3 = false
(lldb) p nsnumber_is_like_integer(@0)(Why different of the first ?)
(bool) $5 = true
(lldb) p nsnumber_is_like_integer(@1)
(bool) $4 = true
在此先感謝,如果您有任何想法,是我的代碼領域問題還是問題?
是否有可能數字實際上是一個字符串?你還可以'p obj.objCType'? – segiddins
我可以不記錄「p obj.objCType」,因爲它是一個id,但我的第一個日誌顯示該對象是一個NSNumber。((NSNumber *)$ 6 = 0x15e76f50 @「0」)我試圖記錄po [obj類],結果是__NSCFNumber – Hikosei