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

标签 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:(NSInteger)component
{
    NSMutableArray *timing = [[NSMutableArray alloc] init];

    for (int i = 0; i < 60; i++) {
        [timing addObject:[NSNumber numberWithInt:i]];
    }
    return timing[row];
}

但是我得到了这个错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber length]: unrecognized selector sent to instance 0xb000000000000002'

不知道什么意思

当我尝试将字符串添加到 timing(而不是 [NSNumber...])时,它会起作用。

最佳答案

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

这个方法应该返回一个 NSString,但是你从 timing 数组中返回一个对象,你刚刚用 NSNumber 对象。 __NSCFNumberNSNumber 的私有(private)子类。选择器 View 中的某些东西假设您返回的对象是一个 NSString,并且正在询问它的 length

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

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

奖金

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

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    // @(row) is equivalent to [NSNumber numberWithInteger:row]
    return [NSString stringWithFormat:@"%@", @(row)];
}

额外奖励

由于您的号码将面向用户,因此您应该使用 NSNumberFormatter ( link to tutorial ) 来确保它们是针对用户区域设置的正确格式化程序。

关于ios - 将数字 0 - 59 添加到 NSMutableArray 以显示在 pickerView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28666264/

相关文章:

ios - 在 appDelegate 中访问 Storyboard 和嵌套的 UIViewController

iphone - 尝试构建非临时版本时出现 Entitlements.plist 错误?

ios - Objective-C 通过绘图裁剪图像

iphone - 来自 GCD 的线程读取旧值

ios - 如何在 iOS 中正确实现视频库

ios - 使用高度信息迭代 UIImage 的各个像素

python - 在 Python 3.6 中追加迭代时重复元素

Windows 批处理命令 : How to dereference FOR loop variable to check if that variable is SET in Environment Variable

javascript - 创建一个有两个参数的函数,参数 a 将是一个数组,参数 b 将在数组中查找一个元素

ios - 分配给变量或立即返回它不起作用