Objective c 将数据从表视图控制器传递到嵌入式容器视图

Objective c 将数据从表视图控制器传递到嵌入式容器视图,objective-c,xcode,uiviewcontroller,Objective C,Xcode,Uiviewcontroller,需要将来自作业表视图控制器中单元格的数据传送到作业详细信息视图控制器 使用prepareforsgue将数据从作业表视图控制器传递到作业容器视图控制器。 我已尝试从作业表视图控制器发送NSNotification,但在触发NSNotification之前加载了作业详细信息视图控制器的viewDidLoad,我认为这不是一个好的编程 我已尝试委派,但作业表视图控制器没有对作业详细信息视图控制器的引用 我尝试在作业容器视图控制器中建立容器视图的出口连接,但它属于UIView类型,因此我在其中找不到

需要将来自作业表视图控制器中单元格的数据传送到作业详细信息视图控制器

使用prepareforsgue将数据从作业表视图控制器传递到作业容器视图控制器

  • 我已尝试从作业表视图控制器发送NSNotification,但在触发NSNotification之前加载了作业详细信息视图控制器的viewDidLoad,我认为这不是一个好的编程

  • 我已尝试委派,但作业表视图控制器没有对作业详细信息视图控制器的引用

  • 我尝试在作业容器视图控制器中建立容器视图的出口连接,但它属于UIView类型,因此我在其中找不到对作业详细视图控制器的引用

  • 正确的方法是什么?非常感谢大家

    JobTableViewController.m这是可行的

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {    
        NSIndexPath *path = [self.tableView indexPathForSelectedRow];
        Job * selectedJob = [listOfJobs objectAtIndex:path.row];
        [[segue destinationViewController] sendSelectedJob:selectedJob];
    }
    
    jobContainerServiceController.m

    Job * currentJob;
    @synthesize jobDescriptionLabel;
    
    - (void)viewDidLoad
    {
        [self updateFields:currentJob];
    }
    
    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        [[segue destinationViewController] sendSelectedJob:currentJob];
    }
    
    -(void) updateFields:(Job *)job {
        jobDescriptionLabel.text = job.job_name;
    }
    
    - (void) sendSelectedJob:(Job *)currentjob {
        currentJob = currentjob;
    }
    
    JobDetailViewController.m

    Job *job;
    
    - (void)viewDidLoad
    {
        [self updateFields:job];
    }
    
    - (void) sendSelectedJob:(Job *)currentjob {
        job = currentjob;
    }
    
    -(void)updateFields:(Job *) job {
       // update fields 
    }
    

    我还没有掌握全部情况。我想下面是你需要的。首先,您需要有一个包含所有作业数据的共享模型

    在作业详细信息视图控制器下:

    -(void)viewWillAppear:(BOOL)animated{
       [super viewWillAppear:animated];
       [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showDataOnJobDetails) name:@"showDataOnJobDetails" object:nil];
     }
    
    -(void)viewWillDisappear:(BOOL)animated{
       [super viewWillDisappear:animated];
       [[NSNotificationCenter defaultCenter] removeObserver:self name:@"showDataOnJobDetails" object:nil];
    }
    
    -(void)showDataOnJobDetails{
      //TODO: Update whatever you need on showDataOnJobDetails using data from Share Model.
    }
    
    作业容器视图控制器的视图下出现

    [[NSNotificationCenter defaultCenter] postNotificationName:@"showDataOnJobDetails" object:nil];
    

    看看这个答案:否@Enricousatyo我要的是右边的细节视图控制器。PrepareForSegue的工作原理与我的帖子中所写的一样。有人知道答案吗??我还没有解决这个问题。我不明白为什么你不能用同样的方法将数据传递给VC。您是如何推动JobDetailViewController的?@EnricoSusatyo我在JobContainerView中添加了prepareForSegue,这确实有效。对我来说,不应该通过视图传递数据更有意义。相反,只有一个视图将其发送给所有“侦听器”。此外,showDataOnJobDetails只能设置类变量currentjob,在viewDidLoad中我可以调用updateFields。我担心工作对象可能是零。在仔细分析你的问题后,我得出结论,它不起作用。ViewWillDisplay太晚了,NSNotification已经发送,但此时没有侦听器!