Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 将UIView标记用作NSMutableDictionary的键_Objective C_Uiview_Nsdictionary - Fatal编程技术网

Objective c 将UIView标记用作NSMutableDictionary的键

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

我想使用UIView标记作为NSMutableDictionary的键。但是,编译器使用NSInteger作为键来反对我。我想做以下工作:

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;