使用重新加载数据选择子项后,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 重新填充子项

更改数据和 popViewController 后 TableView 不会重新加载

JSON请求后以编程方式TableView不会重新加载数据

从列表中选择并重新加载 Tableview Swift

获取异步 JSON 数据后重新加载 tableview

Obj-C - 数据重新加载后TableView滚动到底部?