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

时间:2014-03-27 03:56:55

标签: ios objective-c

所以我在详细视图控制器中创建了我的NSMutablearray,分配了数据等,但我只是想知道如何在主视图控制器中访问它?这是我第一次使用表格视图等,所以我对它很无能为力。

由于

3 个答案:

答案 0 :(得分:1)

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

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

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

在创建viewcontroller对象时与DetailViewController类似

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

答案 1 :(得分:1)

通常模式相反,您可以在主视图控制器中创建对象,并将指向此VC的特定项目的指针传递给详细信息VC。然而,这只是最常见的模式,如果您认为合适,您所做的就是正确的。

通常,Detail VC通过委托将数据返回给Master VC。这里有数以百计的关于如何做的教程和问题,我会复制粘贴教程。但简而言之,步骤是:

  1. 您创建自定义协议,并声明Detail VC将调用的方法将任何信息传递给Master VC
  2. 您的Master VC实施或符合该协议
  3. 您的Detail VC有一个类型为id<yourProtocol>的实例变量,指向代理
  4. Master VC将Detail VC中的委托指针设置为self(自身,例如Master VC)
  5. 这听起来很复杂,而且确实有一点点,但是一旦你掌握了这个概念,你会发现它几乎适用于你的所有项目。

    另一种可能性是使用通知让Master VC知道Detail VC中的内容发生了变化。

答案 2 :(得分:0)

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

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

ViewController界面

@property (nonatomic, strong) NSMutableArray *mutableArray;

DetailViewController界面

@property (nonatomic, strong) ViewController *viewController;

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

detailViewController.viewController = self;

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

您可以使用viewWillDisappear方法执行此操作。

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];

    self.viewController.mutableArray = _myNewlyCreatedMutableArray;
}

因此,当您返回ViewController时,只需访问self.mutableArray,您就可以获得在详细信息视图中创建的数组。