17

配列内の値を判別してから、配列に変更を実装しようとしていますが、そもそも配列にアクセスできません...

NSNumber *row = [NSNumber numberWithInt:recognizer.view.tag];
    NSInteger *newRow = [row integerValue];
    NSInteger *index = [selectedItems indexOfObject:row];//0=Not selected 1=selected;
    NSLog(@"%@ & ",row);
    if (index == 0) {
        [selectedItems removeObjectAtIndex:newRow];
        [selectedItems insertObject:@"1" atIndex: newRow];
        [(UITableViewCell *)(recognizer.view) setAccessoryType:UITableViewCellAccessoryCheckmark];
    } else {
        [selectedItems removeObjectAtIndex: newRow];
        [selectedItems insertObject:@"0" atIndex: newRow];;
        [(UITableViewCell *)(recognizer.view) setAccessoryType:UITableViewCellAccessoryNone];
    }

ご覧のとおり、NSNumberである行変数から情報を取得し、インデックス変数を使用して配列の値を見つけようとしています。また、onload()でこれを宣言しました...

selectedItems = [NSArray arrayWithObjects: 0, 0, 0, nil];

問題は、これらの警告がすべて表示されることです...

Incompatible integer to pointer conversion initializing 'NSInteger *' (aka 'int *') with an expression of type 'NSUInteger' (aka 'unsigned int'); 

varaiblesrowまたはnewRowを使用するときはいつでも。ご覧のとおり、newRowは単なる整数の行です。私は何が間違っているのですか?

4

2 に答える 2

54

NSIntegerは単なるtypedefでintあるため、オブジェクト型ではなく、スカラーであり、ポインタ型として宣言する必要はありません。使用する

NSInteger newRow = [row integerValue];

代わりは。

于 2012-04-08T12:12:30.237 に答える
2

NSIntegerはプリミティブであり、オブジェクトタイプではありません。配列などのコレクションには、NSNumberなどのオブジェクトのみを含めることができます。

などのメソッドを使用して、NSNumberからプリミティブ値を取得できます-integerValue。通常はNSIntegerポインタ(NSInteger *)を作成する必要はなく、NSIntegerが必要なだけであることに注意してください。

またrecognizer.view.tag、を取得して、そこからNSNumberを作成し、そのNSNumberを呼び出すことにも意味がありません-integerValuerecognizer.view.tag整数値として直接使用してください。(すぐにアクセスできるように、ローカル変数に割り当てることもできます。)

于 2012-04-08T12:10:59.280 に答える