iOS - 从当前视图控制器返回数据

时间:2014-02-20 14:05:11

标签: ios objective-c

我的按钮点击事件在AssetScreenPopupViewController AssetScreenPopupViewController中显示NSNumber我动态地将NSMutableArray(emailClkArray)添加到emailClkArray

当我解除viewcontroller时,我正在浏览我的BrowseProgrammingTools中的- (void)imageViewTapped:(UITapGestureRecognizer *)gr { AssetScreenPopupViewController * assetController = [[AssetScreenPopupViewController alloc]init]; assetController.AssetContentArray = tableData_one; assetController.myStringValue = gridPopUpController.assetName.text; [self.navigationController presentViewController:assetController animated:NO completion:nil]; NSLog(@"Asset ARRAY %@",assetController.emailClkArray); [self.navigationController.delegate self]; } 。但我总是得到空白数组

我提供modalviewcontroller的代码是

 - (IBAction)emailClkBtn:(id)sender {
          [self.emailClkArray replaceObjectAtIndex:k withObject:[NSNumber numberWithInt:1]];
          [self.emailBtnOutlet setBackgroundImage:newImage1 forState:UIControlStateNormal];
          NSLog(@"WMA  dhbc%@",self.emailClkArray);
       }

我向数组添加值的ModalViewController类方法如下

ParentViewController

当我解雇视图控制器时,我已将emailClkArray指定为
    - (IBAction)dismissClk:(id)sender { BrowseProgrammingTools *browsePrgTools = [[BrowseProgrammingTools alloc]init]; browsePrgTools.emailClkArray = self.emailClkArray; [self dismissViewControllerAnimated:NO completion:Nil]; } 像这样的MutableArray

viewDidAppear

当我使用BrowseProgrammingTools这样的-(void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:YES]; self.emailClkArray = [[NSMutableArray alloc]init]; NSLog(@"DNW%@",self.emailClkArray); } 方法打印此数组时

DNW(
 )

我正在获得像这样的空白数组

{{1}}

请帮助我如何获得价值?

2 个答案:

答案 0 :(得分:1)

你误解了控制的流程。

当您拨打presentViewController:animated:completion:时,呼叫会立即返回。在视图控制器甚至显示在屏幕之前执行之后的下一行。

您应该将AssetScreenPopupViewController设置为具有委托属性。定义一个AssetScreenPopupViewController将用于与视图控制器通信的协议,该控制器在用户完成选择时调用它。

答案 1 :(得分:1)

你的问题在这里:

- (IBAction)dismissClk:(id)sender {
     BrowseProgrammingTools *browsePrgTools = [[BrowseProgrammingTools alloc]init];
     browsePrgTools.emailClkArray = self.emailClkArray;
     [self dismissViewControllerAnimated:NO completion:Nil];
}

你正在实例化一个新的视图控制器,传递一个数组,然后......好吧,然后什么都没有。当您关闭拥有它的VC时,该视图控制器会消失 - 您将在下一行代码中执行此操作。行BrowseProgrammingTools *browsePrgTools = [[BrowseProgrammingTools alloc]init];不会抓取呈现的VC,它会创建一个新的实例。

您可能希望在显示的VC中创建一些委托方法(查找@protocol),然后在设置导航控制器的委托后立即设置委托。然后,不要调用[self dismissViewControllerAnimated:NO completion:Nil];,以委托实现的任何方法调用它。