2011-05-25 87 views
0

我需要得到的價值在地圖上的特定鍵,打通關鍵值的字典

id val = [m_cAppIdMap valueForKey:wTimerIds]; 

其中wTimerIds是一個無符號短整型。

運行時異常:EXC_BAD_ACCESS

警告:使 的參數1 'valueForKey:' 使得從 整數指針,未作鑄造

EDITED:

NSNumber* val = [m_cAppIdMap valueForKey:[NSNumber numberWithUnsignedShort:wTimerIds]]; 

警告我得到的是, 不兼容Objective-C類型的結構NSNumber *」,預期‘結構的NSString *’時 傳遞的參數1‘valueForKey:’從不同目標C型

的運行時異常我得到是, [NSCFNumber長度]:無法識別的選擇發送到實例0x100110c20

我將密鑰存儲爲dictioanry.so中的unsigned short,所以我試圖用該數據類型搜索字典中的值。

+0

試試這個ID * VAL = [m_cAppIdMap valueForKey:wTimerIds]。 – 2011-05-25 09:36:28

+0

或此id * val =(id *)[m_cAppIdMap valueForKey:wTimerIds]; – 2011-05-25 09:36:44

+0

@viTo兄弟:我試過你叫我做。但它仍然有錯誤的兄弟。 – spandana 2011-05-25 09:53:17

回答

2

您應該使用

NSNumber *wTimerIdsNum = [NSNumber numberWithInt:wTimerIds]; 
id val = [m_cAppIdMap objectForKey:wTimerIdsNum]; 
+0

仍然我與無法識別的選擇器發送到實例0x100110c20 和/NSArray/NSArray1.m:107:0/NSArray/NSArray1.m:107:警告:不兼容Objective-C類型的結構NSNumber *',預計'結構NSString *'從不同的Objective-C類型傳遞'valueForKey:'的參數1時 警告 – spandana 2011-05-25 09:56:37

+1

@ron什麼類型是m_cAppIdMap變量?嘗試objectForKey:而不是如果valueForKey。 – 2011-05-25 10:01:08

+0

謝謝他的工作。存儲的值是一個指向結構的指針,它是一個對象。 – spandana 2011-05-25 10:04:48

3

你不能有原始的整數作爲關鍵。密鑰必須是對象。您可以將該整數包裝爲NSString以用作關鍵字。

NSString *key = [NSString stringWithFormat:@"%d", wTimerIds]; 
[m_cAppIdMap setValue:val forKey:key]; 
id val = [m_cAppIdMap valueForKey:key]; 

或者您也可以將其包裝在NSNumber中。你需要爲設置和獲取使用相同的東西。也就是說,如果你在setValue:forKey:中使用字符串,那麼你需要使用字符串valueForKey:。同樣如果你使用NSNumber那麼你需要在兩個地方使用它。

+0

爲什麼在有完美的數字對象類型時轉換爲字符串? – 2011-05-25 09:43:40

+0

這只是很多人,包括我:-),只喜歡字符串作爲關鍵。儘管數量非常好。我編輯了我的答案。 – taskinoor 2011-05-25 09:44:46

+0

我正在retreiving的值是一個指向結構的指針。它向我展示了一個空值。但實際上,該鍵的值存在於字典中。 – spandana 2011-05-25 10:01:15