1

我已经成功设置了UITableView从数组中提取其单元格标签的 a。我想要做的是将一个对象添加到该数组并重新加载 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
4

3 回答 3

1

你试过了吗

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

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

于 2012-12-04T10:22:38.780 回答
1

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

于 2012-12-04T05:42:33.633 回答
0

我认为,您是硬编码 numberOfRowsInSection 请检查,它将是 -

              - (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section {
                     return [tasksList count];
                 }
于 2012-12-04T05:54:54.513 回答