Ios NSInteger的可变副本
我正在尝试制作一个Ios NSInteger的可变副本,ios,objective-c,uipickerview,nsinteger,Ios,Objective C,Uipickerview,Nsinteger,我正在尝试制作一个NSInteger的可变副本?。但是,由于NSInteger是一个不可变的对象,因此这不起作用。如果我没有创建行变量的可变副本,UIPickerView在选择一行时会跳到下一行 这是我的代码: - (void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component { if (pickerView == _frequencyPi
NSInteger
的可变副本?。但是,由于NSInteger
是一个不可变的对象,因此这不起作用。如果我没有创建行变量的可变副本,UIPickerView
在选择一行时会跳到下一行
这是我的代码:
- (void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component
{
if (pickerView == _frequencyPicker) {
[_detailTableViewController.currentAlarm.cycles replaceObjectAtIndex:0 withObject:[NSNumber numberWithInteger:row]];
[self.tableView reloadData];
} else {
int rowNumber = (int)row;
// -> mutableCopy
rowNumber++;
NSLog(@"%s:%d",__PRETTY_FUNCTION__,rowNumber);
[_detailTableViewController.currentAlarm.cycles replaceObjectAtIndex: withObject:[NSNumber numberWithInteger:row]];
[self.tableView reloadData];
}
}
由于您使用的是
NSInteger
,而不是NSNumber
,因此可以重写代码,而无需声明和递增基本变量,如下所示:
[_detailTableViewController.currentAlarm.cycles
replaceObjectAtIndex:0
withObject:@(row+1)];
[self.tableView reloadData];
由于
NSInteger
是原语类型的typedef
,因此不适用于此处的可变性考虑。NSInteger根本不是一个对象,它是“这是一种像int这样的原始数据类型。我不明白你想做什么我想他想让rowNumber和row指向同一个整数。我得到一个警告:指向整数转换的不兼容指针将'NSNumber*'发送到'NSInteger'类型(也称为int)的参数”@JavedGeorge您向replaceObjectAtIndex:
参数而不是零发送什么?@JavedGeorge这很奇怪:上面代码段中唯一发送任何参数的代码行是第一行,它为第二个参数发送NSNumber
,第二个参数应该是id
类型,非NSInteger
。错误一定来自其他地方。我想这是因为我正在调用[NSNumber numberWithInteger:…],对于整数,我们使用了NSNumber文字。我已将整个语句->[NSNumber numberWithInteger:…]替换为@(行+1),现在警告消失了,但当我在模拟器中选择一行时,UIPickerView跳到下一行的问题仍然存在。@JavedGeorge啊,我明白了-它应该是一行或另一行,即[NSNumber numberWithInteger:row+1]
或@(第+1行)
。我喜欢NSNumber文字语法,但这绝对是一个偏好问题。