将对象添加到NSMutableArray,尝试在UITableView上重新加载数据,未显示新对象。 :(

时间:2012-12-04 05:19:57

标签: iphone objective-c

我已成功设置UITableView从数组中提取其单元格标签。我想要做的是向该数组添加一个对象并重新加载UITableView ,这样它将显示该新对象并创建一个新的单元格。不幸的是,我没有运气。

我知道这可能是我在代码中做的非常愚蠢的事情,但是有人能让我知道我哪里出错吗?以下是我目前使用的内容:

这是我的全部.h:

@interface crastinatrViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> {

NSMutableArray *tasksList;

UIView *addtaskview;

}

@property (strong, nonatomic) IBOutlet UITableView *mainTableView;

@property (nonatomic, retain) NSMutableArray *tasksList;

@property (strong, nonatomic) IBOutlet UITextField *taskName;

- (IBAction)addTask:(id)sender;
- (IBAction)startaddTask:(id)sender;
@end

和我的整个.m:

@interface crastinatrViewController ()

@end

@implementation crastinatrViewController

@synthesize mainTableView;

@synthesize tasksList;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    tasksList = [[NSMutableArray alloc] initWithObjects:nil];
    self.mainTableView.delegate = self;
    self.mainTableView.dataSource = self;
    [self.taskName becomeFirstResponder];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return 1;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    NSInteger rows = [[self tasksList] count];

    NSLog(@"rows is: %d", rows);
    return rows;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSString *contentForThisRow = [[self tasksList] objectAtIndex:[indexPath row]];

    static NSString *CellIdentifier = @"CellIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        // Do anything that should be the same on EACH cell here.  Fonts, colors, etc.
    }

    // Do anything that COULD be different on each cell here.  Text, images, etc.
    [[cell textLabel] setText:contentForThisRow];

    return cell;}

-(IBAction)startaddTask:(id)sender {

    addtaskview = [self.storyboard instantiateViewControllerWithIdentifier:@"addTaskView"];

    [self presentViewController:addtaskview animated:YES completion:nil];


}

- (IBAction)addTask:(id)sender {

    [tasksList addObject:self.taskName.text];

    [self dismissViewControllerAnimated:YES completion:nil];

    [mainTableView reloadData];
}

@end

3 个答案:

答案 0 :(得分:1)

请确保您已完成taskList数组的初始化。 比如'tasksList = [[NSMutableArray alloc] init]'。

答案 1 :(得分:1)

你试过吗

[self dismissViewControllerAnimated:YES completion:^{
    [mainTableView reloadData];
}];

另外,放置断点并检查是否在调用reloadData时调用TableView Delegate和DataSource方法。

答案 2 :(得分:0)

我想,你是硬编码的numberOfRowsInSection请检查,它会是 -

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