将模型对象从一个视图控制器传递到另一个导航堆栈中

我有两个UITableViewControllers。 一个显示名称列表,并点击任何单元格将推动第二个TableViewController,使用户能够编辑UITextField中的名称。

现在我可以将名称string从第一个TableViewController传递到第二个。 (我这样做是通过在第二个TableViewController中创build一个属性,然后在推送第二个TableViewController之前设置它)但是如何将编辑的名称string从第二个传递到第一个(这样我可以更新第一个表与编辑的名字)?

在第一个控制器中创build一个可变数组属性,并将该数组和索引传递给第二个控制器。

FirstController.h

@property (nonatomic,retain) NSMutableArray *myStrings; 

FirstController.m

  @synthesize myStrings; init { self.myStrings = [NSMutableArray arrayWithCapacity:8]; } didSelectRowAtIndexPath { SecondVC *vc = [[SecondVC new]; [self.theStrings addObject:@"Original String"]; // or replaceAtIndex: indexPath.row vc.theStrings = self.myStrings; vc.theIndex = indexPath.row; //push detail vc. } 

SecondController.h

  @property (nonatomic, retain) NSMutableArray *theStrings; @property (nonatomic ) int theIndex; 

SecondController.m

  @synthesize theStrings; @synthesize theIndex; doneEditingMethod { [self.theStrings replaceObjectAtIndex: self.theIndex withObject: myNewString]; } 

我主要看三个选项:

  1. 你可以将你的模型定义为一个单例,这个单例很容易从其他对象中访问。 在这种情况下,考虑并发访问模型,它的任何;

  2. 将模型私有的第一个控制器,而不是传递string到第二个控制器,传递一个指针的模型,所以你可以读取和写入;

  3. 通过第二个控制器指向第一个,所以你可以发信号(通过调用一些具体的方法); 这是可以的,如果你inheritance控制器,否则你应该使用委托。

第四种select是使用通知,但我认为1或2是一种方法。

也许你应该看看代表模式,这可以节省你很多时间! 🙂

你知道这就像使用UITableView数据源。 使用委托(或数据源),您可以向根控制器请求或设置信息。

也许这是最好的select! (所以google“objective-c委托”)

祝你好运 !

他们是否通过导航控制器连接?

如果是这样,这可以解决问题

 // in SecondViewController.m NSArray* controllers = self.navigationController.viewControllers; UITableViewController* firstViewController = [controllers objectAtIndex:controllers.count-2]; 

有几种方法可以做到这一点。 我个人使用第三方类来放置string,并在UITableView之间移动时引用该类。