【问题标题】:Delay in passing data using segue Objective-C使用 segue Objective-C 延迟传递数据
【发布时间】:2022-01-05 14:19:52
【问题描述】:

我正在尝试使用 segue 将 storeId 传递给另一个 viewController,但是,传递数据时似乎有延迟?数据一开始是“nil”,我必须再次点击它才能传递正确的数据。

这是我的代码


    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   
    self.passStoreData = self.storeList [indexPath.row];
    self.passStoreId = [self.storeList [indexPath.row] valueForKey:@"storeId"];
    self.passStoreName = [self.storeList [indexPath.row] valueForKey:@"storeName"];
    NSString *store = [NSString stringWithFormat:@"%@ : %@", self.passStoreId, self.passStoreName];
    
    [self.storeButton setTitle:[NSString stringWithFormat:@"%@", store] forState:UIControlStateNormal];
    storeTable.hidden = YES;
    
    [self performSegueWithIdentifier:@"showOrder" sender:self];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    OrderListViewController *orderListVc = [segue destinationViewController];

    orderListVc.theStoreId = self.passStoreData;
    
}

我可以做些什么来避免使用 segue 传递数据的延迟?谢谢。

【问题讨论】:

  • 您如何/在哪里处理OrderListViewController 中的theStoreId
  • 是的,StoreId在OrderListViewController的h文件中
  • 是的,但是在OrderListViewController 的生命周期中,您使用它知道它仅在第二次打开后出现?
  • 啊,是的,self.setStoreId.text = [self.theStoreId valueForKey:@"storeId"]; 我使用它是为了将标签设置为商店 ID。这是否回答你的问题?对不起,我才刚刚开始。
  • 差不多。你在OrderListViewController 中的哪个函数中设置它?

标签: ios objective-c xcode segue


【解决方案1】:

当您调用[segue destinationViewController] 时,OrderListViewController 已加载并可以使用。因此,viewDidLoad 中的任何代码都已经被调用,在您设置 theStoreId 之前。

将您的视图设置代码移动到viewWillAppear:,它应该可以工作。

【讨论】:

  • 我将代码移至 viewWillAppear:- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:YES]; self.setStoreId.text = [self.theStoreId valueForKey:@"storeId"]; } 并且在传递 storeId 时仍有延迟。
  • 试试viewDidAppear:,确保你也打电话给super.viewDidAppear。也许在您的问题中发布代码。
  • 我也尝试使用 viewDidAppear,延迟仍然存在,无法填充 tableView。使用 viewWillAppear,storeId 的传递仍然有延迟,但在再次点击后,它能够被传递并能够填充 tableView。我已经编辑了我的原始问题以添加 OrderListViewController 的 viewDidLoad 和 viewWillAppear 谢谢。
【解决方案2】:

经过尝试和研究。我找到了答案。

我使用dispatch_async(dispatch_get_main_queue() 在主线程上运行它,并且通过 segue 传递数据并没有延迟。谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 2016-05-20
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多