使用重新加载数据选择子项后,Tableview 刷新到父视图
Posted
技术标签:
【中文标题】使用重新加载数据选择子项后,Tableview 刷新到父视图【英文标题】:Tableview refreshing to parent view after selecting child using reload data 【发布时间】:2010-10-15 17:18:06 【问题描述】:我有一个 UITableView,它使用 JSON 从 AppDelegate 获取新数据。它保存数据,然后从 AppDelegate.data3 拉到这个 tableview 类中,在我向 mysql 数据库添加一条记录后,我启动刷新数据的 Delegate 方法。
然而,[self.tableview reLoadData];打破了表格的向下钻取能力,如果我选择了行,它会在瞬间推动子视图并使用父行刷新屏幕。如果我取出 [self.tableview reLoadData];父母向孩子推送,但我没有得到包含新数据的刷新屏幕。
有什么想法吗?
-(void) loadData3;
//Initialize table data source
MyAppDelegate *AppDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
self.tableDataSource3 = [AppDelegate.data3 objectForKey:@"Rows"];
- (void)viewDidLoad
[super viewDidLoad];
if(CurrentLevel3 == 0)
self.navigationItem.title = @"Parent Table";
else
self.navigationItem.title = CurrentTitle3;
- (void)viewDidAppear:(BOOL)animated
[self loadData3];
[self.tableview reloadData];
[super viewDidAppear:animated];
【问题讨论】:
可能会尝试在 [self loadData3] 之前调用 [super viewDidAppear:animated] 我不知道这是否能解决任何问题,但我一直在使用viewWillAppear:
而不是 viewDidAppear:
来处理这种事情。
@nimrod 放置 viewWillAppear 导致:错误 __NSCFArray objectAtIndex:]: index (1) beyond bounds (1)'
【参考方案1】:
有几个问题。不清楚您要做什么。
你将self.tableDataSource3设置为tempArray,然后设置为[AppDelegate.data3 ....];
为什么?
NSArray *tempArray = [[NSArray alloc] init];
self.tableDataSource3 = tempArray;
[tempArray release];
MyAppDelegate *AppDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
self.tableDataSource3 = [AppDelegate.data3 objectForKey:@"Rows"];
在启动时 [self loadData3] 被调用两次。一旦进入 viewDidLoad 和 viewDidAppear。不必要。应该只在 viewWillAppear 中。
您要么没有保存正在添加的数据,要么没有正确检索它。可能需要逐步检查您的代码以查看您是否获得了您应该获得的数据。
【讨论】:
好的,我看到了阵列的冗余。我摆脱了那个。数据正在通过和更新,添加后我添加的项目确实出现在 tableview 上,添加到 mysql 服务器并返回到应用程序并保存。问题是 [self.tableview reloaddata] 打破了向下钻取过程并重新加载父视图。 [self.tableView reloadData] 不会破坏任何东西。它所做的只是调用 UITableViews 委托方法 UITableView cellForRowAtIndexPath。如果父视图正在重新加载,那是因为 UITableView 的数据源尚未更改。意思是,你加载 UITableView 的数组没有改变,或者是空的。您需要关注用于在 cellForRowAtIndexPath 中加载 UITableView 的数组,并逐步查看值以查看数据是否是您需要的。 我刚刚添加了一个 coule 日志来仔细检查 self.tabledatasource3(它是并且已更新),在此过程中我注意到更新数据或重新启动并不重要应用程序,如果 [self tableview.reloadData] 在那里,向下钻取不起作用。 我将其移至 viewWillAppear,以不同的方式崩溃,这是新问题:***.com/questions/3945842/…以上是关于使用重新加载数据选择子项后,Tableview 刷新到父视图的主要内容,如果未能解决你的问题,请参考以下文章
通过核心数据加载文件后,NSBrowser 不会从 NSTreeController 重新填充子项