0

チェックボックス、スライダー、NSTextFieldの値を入力する配列があります。以下の001を参照してください。そしてそれは明らかに機能しています。

ただし、コードを分析すると、次のメッセージが表示されます。

/Users/ronny/DEV/0200-ObjC4/Egg&Breakfast/Classes/TimeController.m:358:24: Argument to 'NSArray' method 'arrayWithObjects:' should be an Objective-C pointer type, not 'NSInteger'

intValueを使用して3行を(NSInteger)に型キャストするなど、いくつかのことを試しました。成功せずに。何が悪いのか分かりますか?

NSArray *myValues = [NSArray arrayWithObjects:
                    [isAppointment state],     //Checkbox
                    [boxForEver    state],     //Checkbox
                    [boxMakeSound  state],     //Checkbox
                    [tickTackFlag  state],     //Checkbox
                    [txtRemark   stringValue], //NSTextField
                    [slideHour      intValue], //Slider
                    [slideMin       intValue], //Slider
                    [slideSec       intValue], //Slider
                    [startAuto     state],     //Checkbox
                    nil];
4

2 に答える 2

3

int、、floatなどのスカラー型をにNSInteger挿入することはできませんNSArray

NSObjectエラーメッセージに記載されているように、ポインタまたはサブクラスを挿入する必要があります。

その欠点を防ぐための一般的な方法は、NSNumber

例えば ​​:

NSInteger foo = 42;
[_myArray addObject:[NSNumber numberWithInteger:foo]];

最近のXcodeバージョンでは、少しのシンタックスシュガーを使用できます

[_myArray addObject:@42];
于 2012-11-16T08:26:29.900 に答える
2

呼び出している、stateまたはintValue正しくないすべての行。

NSArrayは、Objective-Cオブジェクトへの参照のみを保持できます。ただしstate、をintValue返します。これは、Objective-Cオブジェクト参照ではなく、CプリミティブであるNSIntegerのtypedef(エイリアス)です。long

NSNumber整数をオブジェクトでラップする必要があります。Xcode 4.4以降を使用している場合は、新しい@(...)ラッパー構文を使用して整数をNSNumberオブジェクトにラップできます。新しい配列リテラル構文@[...]を使用して、配列を作成することもできます。

NSArray *myValues = @[
                    @([isAppointment state]),     //Checkbox
                    @([boxForEver    state]),     //Checkbox
                    @([boxMakeSound  state]),     //Checkbox
                    @([tickTackFlag  state]),     //Checkbox
                    [txtRemark   stringValue], //NSTextField
                    @([slideHour      intValue]), //Slider
                    @([slideMin       intValue]), //Slider
                    @([slideSec       intValue]), //Slider
                    @([startAuto     state]),     //Checkbox
                    ];
于 2012-11-16T08:28:35.977 に答える