UIPickerView没有返回正确的数据 [英] UIPickerView not returning the correct data

查看:92
本文介绍了UIPickerView没有返回正确的数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个主视图,其中包含一个landscapeview和一个portraitview,它被加载为包装器视图的子视图。横向视图和纵向视图都具有链接到它们的UIPickerView对象。在我的源代码中,我将它们全部作为属性,我还有一个景观和肖像选择器的包装器。它们定义为

I have a Main view with a landscapeview and a portraitview that gets loaded as subviews of the wrapper view. Both the landscape view and portraitview has UIPickerView objects that are linked to them. In my source I have them all as properties and I also have a wrapper for the landscape and portrait pickers. They are defined as

@property (nonatomic, retain, readonly) IBOutlet UIPickerView *pickerTown;
@property (nonatomic, retain, readonly) IBOutlet UIPickerView *pickerType;
@property (nonatomic, retain, readonly) IBOutlet UIDatePicker *pickerFrom;
@property (nonatomic, retain, readonly) IBOutlet UIDatePicker *pickerTo;

@property (nonatomic, retain) IBOutlet UIPickerView *landscapePickerTown;
@property (nonatomic, retain) IBOutlet UIPickerView *landscapePickerType;
@property (nonatomic, retain) IBOutlet UIDatePicker *landscapePickerFrom;
@property (nonatomic, retain) IBOutlet UIDatePicker *landscapePickerTo;

@property (nonatomic, retain) IBOutlet UIPickerView *portraitPickerTown;
@property (nonatomic, retain) IBOutlet UIPickerView *portraitPickerType;
@property (nonatomic, retain) IBOutlet UIDatePicker *portraitPickerFrom;
@property (nonatomic, retain) IBOutlet UIDatePicker *portraitPickerTo;

对于我有的每个只读包装

And for each of the readonly wrappers I have

- (UIPickerView *) pickerTown
{
    if(self.landscapeView.superview)
    {
        return landscapePickerTown;
    }else
    {
        return portraitPickerTown;
    }
}

但当我在肖像或风景时,我试着比如说

But when I am in portrait or landscape, and I try for instance to say

myHelper.selectedTown = [myHelper.towns objectAtIndex:[pickerTown selectedRowInComponent:0]];

我没有得到所选的值,只是数组中的第一个值。

I don't get the selected value but just the first value in the array.

数据添加如下:

if(pickerView == landscapePickerType || pickerView == portraitPickerType) {
    return [myHelper.types objectAtIndex:row];
}else if(pickerView == landscapePickerTown || pickerView == portraitPickerTown){
    return [myHelper.towns objectAtIndex:row]; 
}else
{
    return @"";
}

和数组:

myHelper = [Helper sharedManager];
[myHelper.types addObject:@"None"];
[myHelper.types addObject:@"Food & Wine"];
[myHelper.types addObject:@"Test"];
[myHelper.towns addObject:@"None"];
[myHelper.towns addObject:@"Vanderbijlpark"];
[myHelper.towns addObject:@"Test"];

我在这里做错了什么?

推荐答案

如果您只获得第一个元素,则表明 [pickerTown selectedRowInComponent:0] 正在评估为零,仅当 pickerTown nil 时才会发生。这也很可能是由于插座没有连接。

If you are getting only the first element, it is indicative that [pickerTown selectedRowInComponent:0] is evaluating to zero always which will happen only if pickerTown is nil. That again is most likely due to outlet not being connected.

但在这种情况下,我认为您是直接访问实例变量而不是方法返回的值。如果您对 pickerTown 使用 @synthesize ,请将 @dynamic 。并将语句更改为 [self.pickerTown selectedRowInComponent:0] 以访问getter的值。

But in this case I think you are accessing the instance variable directly and not the value the method returns. If you are using @synthesize for pickerTown, make that @dynamic. And change the statement to [self.pickerTown selectedRowInComponent:0] to access the value of the getter.

这篇关于UIPickerView没有返回正确的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆