填充tableView不会更新

时间:2013-02-21 07:21:57

标签: iphone ios xcode ipad

这是我的问题。我有一个表视图,根据数组的内容填充。到目前为止,一切都很好。此数组用于存储来自服务器的某些映射名称。我有一个刷新按钮,当我点击它时,它将使用新的地图名称(refresh方法)更新数组。

当我点击刷新按钮时,将修改maps数组。添加或删除某些地图(例如,如果用户删除了地图或创建了新地图)。但是,这种情况并没有反映在屏幕上。

假设我有5张地图(名为1,2,3,4,5)。如果我删除一个(比如地图3)并调用refresh,则maps数组(mapsModel->mapsNameList)将包含4个地图,并且该数组的内容是正确的。但是,在iphone屏幕上,我会在表视图中看到(1,2,4,5,5)。我不知道为什么它不会删除一行,如果它不再在maps数组中。

如果我尝试添加地图(比如说地图0),我会遇到同样的问题,我会得到(0,1,2,3,4)而数字5不会出现。

如果我重新启动应用程序,则所有地图都会正确显示...

这是我的代码,如果某些变量名称不明显,请告诉我!

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    int numberOfRows = [[MapsModel sharedMapsModel] numberOfMapsInSection:((UITabBarController*) self.parentViewController).tabBar.selectedItem.tag];

    // Return the number of rows in the section. THIS FUNCTION WORKS
    return numberOfRows;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    MapsModel* mapsModel = [MapsModel sharedMapsModel];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    [[cell textLabel] setText:[[mapsModel->mapsNameList objectAtIndex:((UITabBarController*) self.parentViewController).tabBar.selectedItem.tag] objectAtIndex:indexPath.row]];

    return cell;
}


-(void) refresh {
   [[MapsModel sharedMapsModel] populateMapsNameListWithMapState:MAP_STATE_ALL];

    [self updateView];
}

-(void) updateView {
    //Reorder the maps by alphabetical order
    NSSortDescriptor *sortDescriptor;
    MapsModel* mapsModel = [MapsModel sharedMapsModel];

    sortDescriptor = [[NSSortDescriptor alloc] initWithKey:nil ascending:YES];

    NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
    [[mapsModel->mapsNameList objectAtIndex:self.tabBarItem.tag] sortUsingDescriptors:sortDescriptors];

    //Update the table view
    [self.tableView reloadData];
}

2 个答案:

答案 0 :(得分:0)

您确定[[MapsModel sharedMapsModel] numberOfMapsInSection:在更新后返回正确的值吗?您的表格代码没有问题,您似乎应该检查MapsModel。 您的mapsModel可能会在cellForRowAtIndexPath:numberOfRowsInSection:

中返回错误的值

答案 1 :(得分:0)

我知道这个问题,我有一个标签栏控制器和三个表视图。但是,我尝试只为所有三个表视图使用一个视图控制器...每个表视图一个视图控制器解决了我的问题!