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 的三行类型转换为(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

您不能将标量类型(如intfloat或)NSInteger插入NSArray

NSObject如错误消息中所述,您必须插入指向或子类的指针。

防止该缺点的一种常见方法是使用NSNumber

例如 :

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

在最近的 Xcode 版本中,您可以使用一些语法糖

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

所有调用stateintValue不正确的行。

AnNSArray只能保存对 Objective-C 对象的引用。但是return state,这是一个 typedef (别名),它是 C 原语,而不是 Objective-C 对象引用。intValueNSIntegerlong

您需要将整数包装在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 回答