从 NSArray 对象设置 UIPickerView

Posted

技术标签:

【中文标题】从 NSArray 对象设置 UIPickerView【英文标题】:Setting UIPickerView from NSArray Object 【发布时间】:2014-03-26 01:47:54 【问题描述】:

我正在尝试使用最近 20 个星期一的日期设置 UIPicker 视图。该数组填充了 20 个周对象。例如 NSDate *weekDate=3/24/2014 NSString *weekDateString=Week of 3/24/2014。

当我最初设置行时,它会正确显示前 5-6 行,当我尝试滚动选择器时,它会尝试为其显示的新行设置标题,但 setTitle 正在为 weekDateString 记录(null) .当我在 titleForRow 中记录计数时,列表仍显示计数为 20。

如果我将 NSArray 设置为 NSString 就没有问题。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
        // Custom initialization
        _weeks = [Week getWeeks];

    
    return self;


- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.title=@"Weeks";
    [self.navigationController.navigationBar.layer insertSublayer:[LayoutColors getNavBarGradient:self.navigationController.navigationBar.bounds] atIndex:1];

    self.navigationController.navigationBar.titleTextAttributes
    = @NSForegroundColorAttributeName : [UIColor whiteColor];

    int startYValue = self.navigationController.navigationBar.frame.size.height + HeaderHeight;
    int width = self.view.frame.size.width;
    _picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, startYValue, width/2, DATE_PICKER_HEIGHT)];
    _picker.delegate = self;
    _picker.dataSource = self;

    [self.view addSubview:self.picker];


- (void)viewWillAppear:(BOOL)animated

    [super viewWillAppear:animated];

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView

    //One column
    return 1;


-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component

    //set number of rows
    return _weeks.count;


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

    Week *week = [_weeks objectAtIndex:row];
    return week.weekDateString;

【问题讨论】:

【参考方案1】:

您的代码没有任何问题,因此不得不推断您的模型对象可能有问题,即您的 _weeks 数组实际上并没有按照您认为的方式正确填充 - @987654322 @ 显然缺少某些 Week 对象。你可能应该回去看看你是如何生成这个数组的。

【讨论】:

第一次调用行标题时,我只记录了 weekDateString 的所有值,它显示了所有字符串。然后,当我滚动过去显示的 5 个时,它会给我(空)那些不显示的。 好吧,@bryc3krispies,您需要查看所有代码。听起来您还有其他代码 - 您没有在问题中显示的代码 - 正在破坏您的 _weeks 数组。 例如,您可能在实现 pickerView:didSelectRow:inComponent: 时犯了一些错误,从而破坏了 _weeks。我不知道,因为无论问题是什么,它都存在于您没有向我展示的代码中。 我添加了其余代码,我没有调用 pickerView:didSelectRow 提前感谢您的帮助。 这是一个愚蠢的问题。这是因为 WeekDateString 在类 Week 中设置为 weak。我想这就是当你刚接触 ios 时会发生的事情。所以你是对的,问题出在模型对象中。

以上是关于从 NSArray 对象设置 UIPickerView的主要内容,如果未能解决你的问题,请参考以下文章

从 NSArray 中删除对象

通过指定类名从 NSArray 中检索对象

释放 NSArray 时将对象设置为 nil

从 NSDictionary 对象的 NSArray 中,如何获取唯一的 NSArray

从 plist 读取对象到 NSArray

从 NSArray 返回的自动释放对象?