UIPickerview提供问号而不是数据

时间:2012-01-25 09:07:06

标签: objective-c xcode

修改

我有一个UIPickerview,我想用NSMutualArray中的数据填充它。我已经测试了NSLog中我的数组中是否存在某些内容并且我将数据恢复。但它不会填满我的挑选者

我的pickerviewer有这种方法。

- (NSString *)pickView:(UIPickerView *)pickview titleForRow:(NSInteger)row forComponent:(NSInteger)component{


     return [dataArray objectAtIndex:row];

}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;// assuming a single spinning wheel of strings (not split into left/right for example)
}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    return [json count]; // the number of strings that your parser finds and adds to the array
}

要从我的JSON中获取数据,我使用这两种方法。我在viewdidload中调用了start函数。

-(void) getData:(NSData *) data{

    NSError *error;

    json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

}
-(void) start {

    NSURL *url = [NSURL URLWithString:kGETUrl];

    NSData *data = [NSData dataWithContentsOfURL:url];
    [self getData:data];

}

我还有一个隐藏和显示我的UIPickerviewer的按钮。

-(IBAction)setPicker:(id)sender{
    if (pickview.hidden == TRUE) {
         [pickview setHidden:NO];
        [pickview setDelegate:self];
        [pickview setDataSource:self];

        [pickview reloadAllComponents];
    }else {
         [pickview setHidden:YES];
         [pickview setDelegate:self];
         [pickview setDataSource:self];
        [pickview reloadAllComponents];
    }
}

我使用这种方法来填充我的数组。

-(void) fillArray{
    dataArray = [[NSMutableArray alloc] init];
    for (int i=0; i<[json count]; i++) {
        NSDictionary *info = [json objectAtIndex:i];
        [dataArray addObject:[info objectForKey:@"Use_naam"]];

    }
    NSLog(@"%@\n",dataArray);


}

我在我的viewdidload中调用它。

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self start];
    [self fillArray];


    // Do any additional setup after loading the view, typically from a nib.
}

有人知道我做错了吗?

1 个答案:

答案 0 :(得分:0)

当您看到许多与预期行数匹配的问号时,通常会返回缺少行的标题或视图的方法。

这可能是因为UIPickerView s delegate未设置(您这样做)或因为签名不正确。

您的签名已关闭。它必须完全符合:

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

大多数人都忘了你必须设置UIPickerView delegate datasource