如何使用可变数组在ios6中重新加载tableView?

时间:2013-06-05 18:26:32

标签: uitableview ios6 nsmutablearray

我有一个tableview设置来自可变数组的数据,但我无法弄清楚如何重新加载它,或者即使它首先被加载。

当用户按下按钮时,可变数组会发生变化。当我用测试数据初始化数组时,表视图工作正常。我想我需要重新加载表,但我在cellForRowAtIndexPath中做不成功。我还试图通过.h合成tableView并重新加载从添加按钮被点击方法添加到数组后重新加载(尝试没有反映在代码中,但如果你认为我做错了继续发布正确的方式)。

没有错误,但是当我点击添加按钮时没有任何反应。

非常感谢任何帮助。

相关代码:

·H:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@property (weak, nonatomic) IBOutlet UITextField *name;
@property (weak, nonatomic) IBOutlet UITextField *company;
- (IBAction)add:(id)sender;


**@property (nonatomic, retain) NSMutableArray *currentNames;
@property (nonatomic, retain) NSMutableArray *currentCompanies;
@property (nonatomic, retain) NSMutableArray *names;
@property (nonatomic, retain) NSMutableArray *companies;
@property (weak, nonatomic) IBOutlet UITableView *preExisting;**
@end

的.m:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

**@synthesize name, company, currentNames, currentCompanies, names, companies;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSMutableArray *currentNames = [[NSMutableArray alloc] init];
    NSMutableArray *currentCompanies = [[NSMutableArray alloc] init];
    NSMutableArray *names = [[NSMutableArray alloc] init];
    NSMutableArray *companies = [[NSMutableArray alloc] init];
    self.preExisting = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame] style:UITableViewStylePlain];**
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    this.tableView = tableView;
    return [currentNames 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 = [currentNames objectAtIndex:indexPath.row];

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView reloadData];
}


- (IBAction)add:(id)sender {
    BOOL exists = [names containsObject:name.text];

    if(exists == FALSE){
        [currentNames addObject:[name text]];
        [currentCompanies addObject:[company text]];
        [names addObject:[name text]];
        [companies addObject:[company text]];
    }
    else{
        [currentNames addObject:[name text]];
        [currentCompanies addObject:[company text]];
    }

    [currentNames addObject:[name text]];
    **[_preExisting reloadData];**

    name.text=@"";
    company.text=@"";

}

@end

1 个答案:

答案 0 :(得分:1)

TableView使用数据源(NSArrayNSMutableArray s)来填充自己。它使用各种委托方法来了解如何填充它。因此,在您的情况下,您使用currentNames NSMutableArray的实例来执行此操作。当您操作此数组中的数据时,您希望TableView显示现在编辑过的数组。

所以要在按钮的动作方法中完成数组编辑后重新加载表视图,你应该调用这个方法

[self.tableView reloadData]

那里。

注意: - 如果您在NSMutableArray文件中创建了Interface属性,那么您希望数据源数组具有范围,直到视图控制器持续为止,不要在NSMutableArray文件中重新创建同名Implementation的实例(不要忽略编译器警告)。

viewDidLoad方法中,使用

self.currentNames = [[NSMutableArray alloc] init];

虽然顺便说一下会造成内存泄漏,但要认真考虑,请在继续前进TableView的{​​{3}}。