带有 NSMutableArray 数据的 UITableView 返回空

Posted

技术标签:

【中文标题】带有 NSMutableArray 数据的 UITableView 返回空【英文标题】:UITableView with data from NSMutableArray returns empty 【发布时间】: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。 哦好吧对不起我不知道 【参考方案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

【讨论】:

以上是关于带有 NSMutableArray 数据的 UITableView 返回空的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将带有 NSKeyedArchiver 的 NSMutableArray 保存到核心数据中?

带有 UITextfield 的 UItableView 到 NSMutableArray CRASH on Record 更新单击

JSON到带有AFNetworking的NSMutableArray [重复]

如何使用 NSMutableArray 作为 UITableView 的数据源

将 NSMutableArray 打印到 UITableView

将 NSMutableArray 保存到带有时间戳的文件?