在Objective-C中从一个详细视图控制器访问数组到主视图控制器

所以我创build了我的NSMutablearray在一个详细的视图控制器,分配的数据等,但我只是想知道我如何可以在主视图控制器访问? 这是我第一次使用桌子的意见等,所以我很无知。

谢谢

有一些方法可以做到这一点。

其中之一是:您将NSMutableArray设置为您的视图控制器上的属性。 然后,在你的详细视图控制器上为视图控制器本身设置一个属性。

ViewController接口

 @property (nonatomic, strong) NSMutableArray *mutableArray; 

DetailViewController接口

 @property (nonatomic, strong) ViewController *viewController; 

然后,在ViewController上,在推送DetailViewController之前,将其viewController属性设置为self

 detailViewController.viewController = self; 

然后,在DetailViewController上,将viewController.mutableArray属性设置为刚刚创build的新数组。

你可以在viewWillDisappear方法上做到这一点。

 - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; self.viewController.mutableArray = _myNewlyCreatedMutableArray; } 

所以,当你回到ViewController时,只需访问self.mutableArray ,就可以得到你在细节视图上创build的数组。

您需要使用指定的初始化程序将NSMutableArray传递给Viewcontroller。

在ViewController .m中创build指定的initiliazer,在.h中创builddelcare。

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil WithArr:(NSMutableArray*)arr { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { self.arrTaskList=arr; } return self; } 

像在DetailViewController中创buildviewcontroller对象一样

 ViewController* vc=[ViewController alloc]initWithNibName:@"ViewController" bundle:@"" Arrr:self.arr]; 

通常情况下,模式是相反的,你在主视图控制器中创build对象,并将一个指针从这个VC传递给VC的细节。 然而,这只是最常见的模式,如果你认为合适,你所做的事情可能是正确的。

通常情况下,Detail VC通过委托将数据返回给Master VC。 这里有数百个教程和问题,关于如何做,我会复制粘贴教程。 但总之,步骤是:

  1. 您创build一个自定义协议,并声明Detail VC将调用的任何信息传递给主VC的方法
  2. 您的Master VC实现或符合该协议
  3. 你的Detail VC有一个types为id<yourProtocol>的实例variables指向委托
  4. Master VC将Detail VC中的委托指针设置为self(本身,例如Master VC)

这听起来很复杂,而且确实有一点点,但是一旦你了解了这个概念,你会发现它在你所有的项目中都很有用。

另一种可能性是使用通知来让Master VC知道Detail VC中的某些内容已经改变。