【问题标题】:UITableView with data from NSMutableArray returns empty带有 NSMutableArray 数据的 UITableView 返回空
【发布时间】:2013-01-10 18:53:48
【问题描述】:

我想根据PickerView 视图中的选择填充TableView 的内容。我到目前为止的代码是:

- (IBAction)findOwnerButtonPressed:(id)sender
{
    findShip.hidden = NO;
    shipOwners.hidden = NO;

    boatsTableView.hidden = YES;
    boatOwners = [NSArray arrayWithObjects:@"Owner1",@"Owner2",@"Owner3", nil];
}

- (IBAction)findShipButtonPressed:(id)sender
{
    shipOwners.hidden = YES;
    findShip.hidden = YES;
    boatsTableView.hidden = NO;
}

PickerView 数据源

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return [boatOwners count];
}

- (NSString *)pickerView:(UIPickerView *)pickerView
             titleForRow:(NSInteger)row
            forComponent:(NSInteger)component
{
    return [boatOwners objectAtIndex:row];
}

PickerView 委托

- (void)pickerView:(UIPickerView *)pickerView 
      didSelectRow:(NSInteger)row
       inComponent:(NSInteger)component
{
    NSString *boatsFromOwner = [boatOwners objectAtIndex:[shipOwners selectedRowInComponent:0]];
    boatsForOwner = [NSMutableArray arrayWithObjects:nil];
    if ([boatsFromOwner isEqualToString:@"Owner1"]) {
        [self.boatsForOwner addObject:@"Titanic"];
    }
    NSLog(@"%@",boatsFromOwner);
}

TableView 数据源和委托

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [boatsForOwner count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"SimpleTableItem";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }

    cell.textLabel.text = [boatsForOwner objectAtIndex:indexPath.row];
    return cell;
}

这应该是从PickerWheel 退回船主公司,并把他们的船给我。此代码在表中不返回任何内容。 PickerWheel 在我选择它时会记录“Owner1”。

我在如何将对象添加到数组或如何初始化表或如何将PickerWheel 结果与单词进行比较时是否存在错误?

【问题讨论】:

  • 你有没有实例化过boatsForOwner?
  • 是的,在 .h 中并合成
  • 不,这不是实例化——实例化意味着你接受的答案中的 alloc init。
  • 哦好吧对不起我不知道

标签: ios objective-c uitableview uipickerview


【解决方案1】:

做完之后

[self.boatsForOwner addObject:@"Titanic"];

您将需要手动刷新您的 tableview.. 所以之后这样做

[_yourTableView reloadData];

我也会像这样初始化你的数组:

boatsForOwner = [NSMutableArray new];

【讨论】:

  • 在.h文件中合成后还需要这样做吗? (初始化)
  • 你说的是你的 UITableView 属性吗?
  • 哦,是的,您仍然需要像我一样在代码中初始化它。如果您不这样做,它不会给您错误或崩溃,但实际上不会将任何内容添加到您的数组中
  • 奥凯,谢谢。你们两个都帮了我,所以我会支持你的并接受其他人,因为你的代表最高:)
【解决方案2】:

我认为首先alloc & init 数组“boatsForOwner”

将您的选择器didSelectRow 方法替换为

-(void)pickerView:(UIPickerView *)pickerView 
     didSelectRow:(NSInteger)row
      inComponent:(NSInteger)component
{
    NSString *boatsFromOwner = [boatOwners objectAtIndex:[shipOwners selectedRowInComponent:0]];

    if(boatsForOwner) {
        [boatsForOwner release];
        boatsForOwner = nil;
    }

    boatsForOwner = [NSMutableArray alloc] init];

    if ([boatsFromOwner isEqualToString:@"Owner1"]) {
        [self.boatsForOwner addObject:@"Titanic"];
    }

    NSLog(@"%@",boatsFromOwner);

    [tableObject reloadData];

}

release boatsForOwner 当你dealloc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多