Objective c 将UIView标记用作NSMutableDictionary的键
我想使用UIView标记作为NSMutableDictionary的键。但是,编译器使用NSInteger作为键来反对我。我想做以下工作:Objective c 将UIView标记用作NSMutableDictionary的键,objective-c,uiview,nsdictionary,Objective C,Uiview,Nsdictionary,我想使用UIView标记作为NSMutableDictionary的键。但是,编译器使用NSInteger作为键来反对我。我想做以下工作: NSInteger elementKey = _viewBeingDragged.tag; myClass* element = [_model.elements objectForKey:elementKey]; 如何使用elementKey作为字典键?NSInteger不是对象,不能用作键。您可以将其包装为: NSNumber* elementKey
NSInteger elementKey = _viewBeingDragged.tag;
myClass* element = [_model.elements objectForKey:elementKey];
如何使用elementKey作为字典键?NSInteger不是对象,不能用作键。您可以将其包装为:
NSNumber* elementKey = [NSNumber numberWithInt:_viewBeingDragged.tag];
而是为密钥创建NSString,尽管您可以使用任何NSCopying conform对象:
NSString *key = [NSString stringWithFormat: @"%d",elementKey];
我同意@Mario和@EvanMulawski,但我更喜欢用字符串作为我的钥匙。哦,至于编译器拒绝使用NSInteger的原因,是NSInteger与long int相当 用NSNumber文本包装它 和任务:
NSInteger tag = view.tag;
myClass *value;
_model.elements[@(tag)] = value;
是的,正如我所写的,我也更喜欢字符串,因为使用kvc是安全的。您的代码段不正确,因为您没有传递参数来匹配%d格式说明符。此外,当NSNumber更适合使用时,使用字符串作为键是一个坏主意,而且可能不安全。例如,对于64位,%d不是NSInteger的正确说明符,因此可以为两个不同的标记获取相同的字符串。此问题已在此处得到解答:
NSString* elementKey = [NSString stringWithFormat:@"%i",_viewBeingDragged.tag];
//or NSNumber* elementKey = [NSNumber numberWithInt:_viewBeingDragged.tag];
myClass* element = [_model.elements objectForKey:elementKey];
myClass* element = _model.elements[@(_viewBeingDragged.tag)];
NSInteger tag = view.tag;
myClass *value;
_model.elements[@(tag)] = value;