在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。 这里有数百个教程和问题,关于如何做,我会复制粘贴教程。 但总之,步骤是:
- 您创build一个自定义协议,并声明Detail VC将调用的任何信息传递给主VC的方法
- 您的Master VC实现或符合该协议
- 你的Detail VC有一个types为
id<yourProtocol>
的实例variables指向委托 - Master VC将Detail VC中的委托指针设置为self(本身,例如Master VC)
这听起来很复杂,而且确实有一点点,但是一旦你了解了这个概念,你会发现它在你所有的项目中都很有用。
另一种可能性是使用通知来让Master VC知道Detail VC中的某些内容已经改变。
- IBM Worklight – iOS 7状态栏与应用程序的HTML重叠
- 具有dynamic单元高度的UITableView在重新加载单元格后向上滚动时跳转
- Google Maps iOS SDK,获取2个位置之间的路线
- 滚动时在UITableViewCells中滑动
- UItableview scrollToRowAtIndexPath不能正确显示最后一行
- 在iOS 8.1下出现UIPopoverController之前的不可预知的延迟
- NSTimer代表NoSwiftyTimer
- 如何使用Swift 4(滑动选项卡/段)在iOS中实现类似于Android的选项卡布局
- NSDateFormatter- stringFromDate不返回AM / PM