2017-07-06 108 views
1

NSObject類創建的NSMutableDictionary的NSMutableDictionary返回null

@property (nonatomic, strong) NSMutableDictionary<NSNumber *, NSString *> *requestComments; 

,當談到通過API保存在這個變量中的數據。

但是,當我發送密鑰以獲取值時,它每次都返回空值。

爲了讓我做這樣的

NSLog(@"%@",dataManager.requestComments[serviceRequest.RequestId]); 
// serviceRequest.RequestId is returning NSNumber. 

我得到的輸出是"(null)"

如果我用喜歡這個值則返回一個值

NSLog(@"%@",[dataManager.requestComments valueForKey:@"30221"]); 

爲什麼它在上述情況下返回null。

+0

你可以顯示你的'requestComments'請打印在日誌中並加入問題 – Dhiru

+0

它只是打印「2017-07-06 12:45:31.071 WorkForApp [6076:96649](null)」 –

+0

什麼是輸出'[dataManager.requestComments objectForKey:serviceRequest.RequestId]'? – nayem

回答

2

根據您的問題,這應該工作

NSLog(@"%@",dataManager.requestComments[[serviceRequest.RequestId stringValue]]); 

因爲你給了鑰匙爲NSString且將其返回基於一個NSNumber期待。你需要看看你用來存儲這本字典的代碼。

更新

你剛纔提到,關鍵是NSNumber類型。但是你在傳遞一個字符串valueForKey並獲取有效的對象。你應該從API響應中檢查你是如何形成這本詞典的。

+0

但正如我提到這個可變字典的關鍵是NSNumber。轉換爲字符串將導致錯誤。 –

+0

然後檢查你如何存儲到字典中。你使用NSNumber類型作爲鍵還是NSString?沒有任何代碼,很難說。 – adev

+0

也可以打印serviceRequest.RequestId和dataManager.requestComments兩個NSLogs並加入到這個問題? – adev

1

因爲你宣佈requestComment是一個NSDictionary哪些鍵NSNumbers和值NSString不會迫使它尊重它。

樣品:

_requestComments = [[NSMutableDictionary alloc] init]; 

[_requestComments setObject:[NSNumber numberWithInt:34] forKey:@"54"]; // => Warning: Incompatible pointer types sending 'NSNumber * _Nonnull' to parameter of type 'NSString * _Nonnull' 

id obj = [NSNumber numberWithInt:35]; 
id key = @"55"; 
[_requestComments setObject:obj forKey:key]; 

NSLog(@"[_requestComments objectForKey:@\"55\"]: %@", [_requestComments objectForKey:@"55"]); //Warning: Incompatible pointer types sending 'NSString *' to parameter of type 'NSNumber * _Nonnull' 
NSLog(@"[_requestComments objectForKey:@(55)]: %@", [_requestComments objectForKey:@(55)]); 

日誌:

$>[_requestComments objectForKey:@"55"]: 35 
$>[_requestComments objectForKey:@(55)]: (null) 

好吧,我用id引誘編譯器,但id是一種常見的返回 「類」,在objectAtIndex:,等,這是常見的JSON解析,當你認爲一個對象將是NSString,但實際上是(反)的NSNumber

在做requestComments[serviceRequest.RequestId]之前,枚舉所有鍵值& class和ALL object值& class。你可以這樣檢查:

for (id aKey in _requestComments) 
{ 
    id aValue = _requestComments[aKey]; 
    NSLog(@"aKey %@ of class %@\naValue %@ of class %@", aKey, NSStringFromClass([aKey class]),aValue, NSStringFromClass([aValue class])); 
} 

然後你可以嘗試跟蹤你放錯鑰匙(class)的位置。