【问题标题】:Tableview refreshing to parent view after selecting child using reload data使用重新加载数据选择子项后,Tableview 刷新到父视图
【发布时间】: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)'

标签: iphone uitableview reloaddata


【解决方案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,以不同的方式崩溃,这是新问题:stackoverflow.com/questions/3945842/…
猜你喜欢
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
  • 2011-06-11
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
相关资源
最近更新 更多