这是我的问题。我有一个表视图,根据数组的内容填充。到目前为止,一切都很好。此数组用于存储来自服务器的某些映射名称。我有一个刷新按钮,当我点击它时,它将使用新的地图名称(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];
}
答案 0 :(得分:0)
您确定[[MapsModel sharedMapsModel] numberOfMapsInSection:
在更新后返回正确的值吗?您的表格代码没有问题,您似乎应该检查MapsModel
。
您的mapsModel可能会在cellForRowAtIndexPath:
和numberOfRowsInSection:
答案 1 :(得分:0)
我知道这个问题,我有一个标签栏控制器和三个表视图。但是,我尝试只为所有三个表视图使用一个视图控制器...每个表视图一个视图控制器解决了我的问题!