2012-06-07 54 views
1

我想使用UIView標記作爲NSMutableDictionary的鍵。但是,編譯器使用NSInteger作爲關鍵字來對我進行對象。我想要做以下事情:使用UIView標記作爲NSMutableDictionary的鍵

NSInteger elementKey = _viewBeingDragged.tag; 
myClass* element = [_model.elements objectForKey:elementKey]; 

如何將elementKey用作我的字典鍵?

+0

這個問題已經在這裏找到答案:http://stackoverflow.com/questions/2992315/uiview-as-dictionary-key –

回答

-3

而是爲重點創建一個NSString,雖然你可以使用任何NSCopying符合對象:

NSString *key = [NSString stringWithFormat: @"%d",elementKey]; 
+0

爲什麼向下票呢? – Mario

+1

您的代碼段不正確,因爲您未傳遞參數以匹配「%d」格式說明符。另外,當'NSNumber'更自然時,使用字符串作爲鍵是一個壞主意,並且可能不安全。例如,對於64位,「%d」不是「NSInteger」的右側說明符,因此您可以爲兩個不同的標籤獲取相同的字符串。 –

0
NSNumber* elementKey = [NSNumber numberWithInt:_viewBeingDragged.tag]; 
2

NSInteger不是一個對象,並且不能被用作密鑰。您可以在NSNumber,而不是把它包裝:

NSNumber* elementKey = [NSNumber numberWithInt:_viewBeingDragged.tag]; 
myClass* element = [_model.elements objectForKey:elementKey]; 
0

我同意雙方@Mario和@EvanMulawski但我更喜歡使用字符串作爲我的密鑰。哦,至於編譯器拒絕使用NSInteger的原因是NSInteger幾乎等於long int s。

NSString* elementKey = [NSString stringWithFormat:@"%i",_viewBeingDragged.tag]; 
//or NSNumber* elementKey = [NSNumber numberWithInt:_viewBeingDragged.tag]; 
myClass* element = [_model.elements objectForKey:elementKey]; 
+0

是的,正如我寫的,我更喜歡字符串,因爲使用kvc是安全的。 – Mario

+0

@Mario'NSNumber'與KVC合作得很好。 – JustSid

0

將其包裝在NSNumber文字中。

myClass* element = _model.elements[@(_viewBeingDragged.tag)]; 

和賦值:

NSInteger tag = view.tag; 
myClass *value; 
_model.elements[@(tag)] = value; 
相關問題