UITableviewcontroller重新加载数据问题

时间:2014-01-28 06:05:40

标签: objective-c uitableview ios7 xcode5 reloaddata

原谅我对iPhone编程的无知,因为我是新手。 我正在创建一个应用程序,其中init视图控制器是用于显示数据的UITable视图控制器和用于输入数据的另一个View控制器。

我的问题是,当我输入新数据时,它不会出现在UItable控制器中,我尝试使用[self.tableview reloadData]中的viewDidLoad重新加载数据,但数据不会重新加载,因为我我正在使用自定义委托,我尝试将[self.tableview reloadData]写为我的自定义委托的最后一行,但它也不起作用,我尝试使用viewDidAppear,但这也不起作用。

这是代码:

MainViewController.m(TableView)

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"Initializing conference array");

    conferenceData = [[NSMutableArray alloc]init];

    SavingData *loadData = [[SavingData alloc]init];
    NSLog(@"Loading the file then fill it in an array");
    conferenceData = [loadData LoadDataArray];

    NSLog(@"Done Initializing conference array");

    [self.tableView reloadData];
}

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

    return 1;
}

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

    return [conferenceData count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

    NSLog(@"writing data in cell number %i",indexPath.row);
    cell.textLabel.text = [[conferenceData objectAtIndex:indexPath.row]name];

    return cell;
}

// Implementing the adding delegate
-(void) setInformation:(Adding *)controller withObject:(Conference *)info
{
    Conference *confer = info; //Temprory Conference object to store data
    SavingData *saveToFile = [[SavingData alloc]init];

    if ([saveToFile SavingDataWithObject:confer]) //Calling SavingDataWithObject method and check if the save operation return true or false
    {
        NSLog(@"Done Saving !!");
    }
    [self.navigationController popToRootViewControllerAnimated:YES]; // after saving return to the main window
    NSLog(@"Should be popped right now");
}

非常感谢您提前

2 个答案:

答案 0 :(得分:0)

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

单元格在这里可以为零,因此您实际上可能无法对单元格进行回归。

尝试使用

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

此功能永远不会返回nil。

但首先你必须注册@Cell是什么。

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
    ...
 }

或者你可以检查单元格是否为零,如果不是则创建单元格,但我认为这种方法更清晰。

最后一想,仔细检查一下,当您调用reloadData实际填充数组时,可以在cellForRowAtIndexPath中设置一个断点,以确保它被称为适当的次数。

答案 1 :(得分:0)

我发现了问题

显然,当我用-viewWillAppear方法编写代码时,表格可以很好地重新加载数据。

非常感谢你帮助我