Ios 将数字0-59添加到NSMutableArray以在pickerView中显示

Ios 将数字0-59添加到NSMutableArray以在pickerView中显示,ios,objective-c,for-loop,uipickerview,Ios,Objective C,For Loop,Uipickerview,我有一个UIPickerView。我想做的是显示数字0-59。我尝试了以下代码: - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { return 60; } - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(

我有一个
UIPickerView
。我想做的是显示数字0-59。我尝试了以下代码:

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return 60;
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    NSMutableArray *timing = [[NSMutableArray alloc] init];

    for (int i = 0; i < 60; i++) {
        [timing addObject:[NSNumber numberWithInt:i]];
    }
    return timing[row];
}
我不知道这是什么意思


当我尝试向
计时添加字符串时(而不是
[NSNumber…]
),它就会起作用。

您必须从
-(NSString*)pickerView:(UIPickerView*)pickerView titleForRow:(NSInteger)行forComponent:(NSInteger)component返回NSString
方法。现在您正在返回NSNumber。编译器不会警告您,因为NSArray可以包含任何对象,它只是不知道这是NSNumber数组而不是NSString数组

您可能希望将带有数字的NSString添加到
计时
中,如
[timing addObject:[NSString stringWithFormat:@“%d”,i]]

另外,看起来您根本不需要
计时
数组-现在您正在为每一行创建它,并且只使用其中的一个元素。您可以像这样直接返回带有数字<代码>行
的字符串

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [NSString stringWithFormat:@"%d", row];
}

您必须从
-(NSString*)pickerView:(UIPickerView*)pickerView titleForRow:(NSInteger)行返回NSString,用于组件:(NSInteger)组件
方法。现在您正在返回NSNumber。编译器不会警告您,因为NSArray可以包含任何对象,它只是不知道这是NSNumber数组而不是NSString数组

您可能希望将带有数字的NSString添加到
计时
中,如
[timing addObject:[NSString stringWithFormat:@“%d”,i]]

另外,看起来您根本不需要
计时
数组-现在您正在为每一行创建它,并且只使用其中的一个元素。您可以像这样直接返回带有数字<代码>行
的字符串

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [NSString stringWithFormat:@"%d", row];
}

您的方法应该返回一个
NSString*
,但您返回一个
NSNumber*

你应该这样写:

 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
  return [NSString stringWithFormat:@"%d", row];
}

无需在每次被调用时构建数组。

您的方法应该返回
NSString*
,但您返回的是
NSNumber*

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
你应该这样写:

 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
  return [NSString stringWithFormat:@"%d", row];
}
无需在每次被调用时构建数组

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
这个方法应该返回一个
NSString
,但是您正在从
计时
数组返回一个对象,您刚刚用
NSNumber
对象填充了该数组
\uu NSCFNumber
NSNumber
的私有子类。picker视图中的某些内容假设您返回的对象是一个
NSString
,并请求其
长度

解决方案是返回一个
NSString
。最简单的方法是:

return [NSString stringWithFormat:@"%@", timing[row]];

奖金 您的代码在算法上很慢,因为每次调用该方法时,它都必须运行一个循环来创建
定时
数组。如果您的代码实际上应该做它在示例中所做的事情(即,如果您没有为问题简化它),那么您可以这样做:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    // @(row) is equivalent to [NSNumber numberWithInteger:row]
    return [NSString stringWithFormat:@"%@", @(row)];
}
额外奖金 由于您的数字将面向用户,因此您应该使用
NSNumberFormatter
()确保它们是用户区域设置的正确格式化程序

这个方法应该返回一个
NSString
,但是您正在从
计时
数组返回一个对象,您刚刚用
NSNumber
对象填充了该数组
\uu NSCFNumber
NSNumber
的私有子类。picker视图中的某些内容假设您返回的对象是一个
NSString
,并请求其
长度

解决方案是返回一个
NSString
。最简单的方法是:

return [NSString stringWithFormat:@"%@", timing[row]];

奖金 您的代码在算法上很慢,因为每次调用该方法时,它都必须运行一个循环来创建
定时
数组。如果您的代码实际上应该做它在示例中所做的事情(即,如果您没有为问题简化它),那么您可以这样做:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    // @(row) is equivalent to [NSNumber numberWithInteger:row]
    return [NSString stringWithFormat:@"%@", @(row)];
}
额外奖金
由于您的数字将面向用户,因此您应该使用
NSNumberFormatter
()确保它们是针对用户区域设置的正确格式设置程序。

%d
将变得不好,具体取决于体系结构。与其处理杂乱的铸造,您只需使用
%@
并将
包装在
NSNumber
中,使用
@(行)
%d
将变得不好,具体取决于体系结构。您可以使用
%@
并使用
@(行)
包装在
NSNumber
中,而不是处理混乱的铸造。我不明白额外的奖金部分。此外,我还尝试了“奖金”代码,效果不错。但是在xcode中,它给了我一个警告“隐式转换丢失整数…”这里有一个关于
NSNumberFormatter
的教程:警告在哪里?应该有一个小三角形指向代码中警告所在的部分。在return语句中,当我将代码粘贴到Xcode中时,我没有得到警告。您确定使用了正确的字符串格式说明符吗?在我的示例中,它是
%@
,而不是
%d
。我不理解额外奖金部分。此外,我还尝试了“奖金”代码,效果不错。但是在xcode中,它给了我一个警告“隐式转换丢失整数…”这里有一个关于
NSNumberFormatter
的教程:警告在哪里?应该有一个小三角形指向代码中警告所在的部分。在return语句中,当我将代码粘贴到Xcode中时,我没有得到警告。您确定使用了正确的字符串格式说明符吗?在我的示例中,它是
%@
,而不是
%d