Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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
Ios NSInteger的可变副本_Ios_Objective C_Uipickerview_Nsinteger - Fatal编程技术网

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文字语法,但这绝对是一个偏好问题。