1

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
4

3 に答える 3

1

taskList 配列の初期化が完了していることを確認してください。「tasksList = [[NSMutableArray alloc] init]」のように。

于 2012-12-04T05:42:33.633 に答える
1

試しましたか

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

また、ブレークポイントを配置し、の呼び出し時reloadDataに、TableView Delegate および DataSource メソッドが呼び出されるかどうかを確認します。

于 2012-12-04T10:22:38.780 に答える
0

私はあなたがハードコーディングされたnumberOfRowsInSectionだと思います、チェックしてください、それは-

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