如何将 NSMutableArray 传递给另一个视图
How to pass a NSMutableArray to another view
以下代码片段是 prepareForSegue
方法的一部分。因为我想将 self.mutaArr
(MutableArray) 传递给 SecViewController
(这是一个 UIViewController
)。
由于以下行而未通过:
[navController setViewControllers:@[dvc] animated: NO ];
如果我通过 s
,我最终会出现黑屏。因此,我该如何排序?
请注意,我也在使用 SWRevealViewController
。
if ([segue isKindOfClass:[SWRevealViewControllerSegue class]]) {
SWRevealViewControllerSegue *swSegue = (SWRevealViewControllerSegue*) segue;
swSegue.performBlock = ^(SWRevealViewControllerSegue* rvc_segue, UIViewController* svc, UIViewController* dvc) {
if ([[segue identifier] isEqualToString:@"gosegue"]) {
UINavigationController* navController = (UINavigationController*)self.revealViewController.frontViewController;
SecViewController *s = [[SecViewController alloc] init];
s.myMutableArr= self.mutaArr;
[navController setViewControllers:@[dvc] animated: NO ];
[self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES];
....
我没看到你的变量有任何作用 s
除了设置一个可变数组,你有没有把这个控制器推到任何地方?也许:
SecViewController *s = [[SecViewController alloc] init];
s.myMutableArr= self.mutaArr;
navController setViewControllers:@[s] animated: NO ]; // Notice `s` replaced `dvc`
恕我直言,将值从一个 controller/view 传递到另一个 controller/view 的最佳方法是使用会话(即 Singleton class)。在 swSegue.performBlock
块内的会话中设置值并在 SecViewController
.
的 viewDidLoad
中获取值
编辑:
查看 this tutorial 以了解单例实现。在第二个例子中 someProperty
可以是 your array
。
关于黑屏,我只是注意到你没有将 navController
反映到 self.revealViewController
。
也许使用这个:
- (void)pushFrontViewController:(UIViewController *)frontViewController animated:(BOOL)animated;
在 self.revealViewController
上推送 navController
可能会解决黑屏问题。
编辑:
这样试试:
if ([[segue identifier] isEqualToString:@"gosegue"]) {
UINavigationController* navController = (UINavigationController*)self.revealViewController.frontViewController;
SecViewController *s = [[SecViewController alloc] init];
s.myMutableArr= self.mutaArr;
[navController setViewControllers:@[s] animated: NO ];
[self.revealViewController pushFrontViewController:s animated: YES];
// OR
//[self.revealViewController pushFrontViewController:navController animated: YES];
....
我从您提供的代码中发现了一些问题:
你必须在你的 segue 的目标视图控制器中定义一个 属性 来保存你的数组,并在你的源视图控制器的 prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
方法中设置它。这确保您在 转换之前 设置您的数据结构(即您的数组)。您可以通过执行
来检索您的 segue 的目标视图控制器
UIViewController *viewController = [segue destinationViewController];
SecViewController *destination = (SecViewController *)viewController;
destination.arrayHoldingProperty = self.myArray;
此处假设您已经在 SecViewController
class 中定义了 arrayHoldingProperty
。
完成第一步后,您可以使用 performSegueWithIdentifier:@"whatever" sender:nil
方法从任何您想要的地方执行 segue。
您正在创建 SecViewController 的另一个实例class
SecViewController *s = [[SecViewController alloc] init];
不要使用这个而不是使用这个:
SecViewController *s = (SecViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"SecViewController"];
s.myMutableArr= self.mutaArr;
以下代码片段是 prepareForSegue
方法的一部分。因为我想将 self.mutaArr
(MutableArray) 传递给 SecViewController
(这是一个 UIViewController
)。
由于以下行而未通过:
[navController setViewControllers:@[dvc] animated: NO ];
如果我通过 s
,我最终会出现黑屏。因此,我该如何排序?
请注意,我也在使用 SWRevealViewController
。
if ([segue isKindOfClass:[SWRevealViewControllerSegue class]]) {
SWRevealViewControllerSegue *swSegue = (SWRevealViewControllerSegue*) segue;
swSegue.performBlock = ^(SWRevealViewControllerSegue* rvc_segue, UIViewController* svc, UIViewController* dvc) {
if ([[segue identifier] isEqualToString:@"gosegue"]) {
UINavigationController* navController = (UINavigationController*)self.revealViewController.frontViewController;
SecViewController *s = [[SecViewController alloc] init];
s.myMutableArr= self.mutaArr;
[navController setViewControllers:@[dvc] animated: NO ];
[self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES];
....
我没看到你的变量有任何作用 s
除了设置一个可变数组,你有没有把这个控制器推到任何地方?也许:
SecViewController *s = [[SecViewController alloc] init];
s.myMutableArr= self.mutaArr;
navController setViewControllers:@[s] animated: NO ]; // Notice `s` replaced `dvc`
恕我直言,将值从一个 controller/view 传递到另一个 controller/view 的最佳方法是使用会话(即 Singleton class)。在 swSegue.performBlock
块内的会话中设置值并在 SecViewController
.
viewDidLoad
中获取值
编辑:
查看 this tutorial 以了解单例实现。在第二个例子中 someProperty
可以是 your array
。
关于黑屏,我只是注意到你没有将 navController
反映到 self.revealViewController
。
也许使用这个:
- (void)pushFrontViewController:(UIViewController *)frontViewController animated:(BOOL)animated;
在 self.revealViewController
上推送 navController
可能会解决黑屏问题。
编辑:
这样试试:
if ([[segue identifier] isEqualToString:@"gosegue"]) {
UINavigationController* navController = (UINavigationController*)self.revealViewController.frontViewController;
SecViewController *s = [[SecViewController alloc] init];
s.myMutableArr= self.mutaArr;
[navController setViewControllers:@[s] animated: NO ];
[self.revealViewController pushFrontViewController:s animated: YES];
// OR
//[self.revealViewController pushFrontViewController:navController animated: YES];
....
我从您提供的代码中发现了一些问题:
你必须在你的 segue 的目标视图控制器中定义一个 属性 来保存你的数组,并在你的源视图控制器的
来检索您的 segue 的目标视图控制器prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
方法中设置它。这确保您在 转换之前 设置您的数据结构(即您的数组)。您可以通过执行UIViewController *viewController = [segue destinationViewController]; SecViewController *destination = (SecViewController *)viewController; destination.arrayHoldingProperty = self.myArray;
此处假设您已经在
SecViewController
class 中定义了arrayHoldingProperty
。完成第一步后,您可以使用
performSegueWithIdentifier:@"whatever" sender:nil
方法从任何您想要的地方执行 segue。
您正在创建 SecViewController 的另一个实例class
SecViewController *s = [[SecViewController alloc] init];
不要使用这个而不是使用这个:
SecViewController *s = (SecViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"SecViewController"];
s.myMutableArr= self.mutaArr;