以下代码片段是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];
....
答案 0 :(得分:0)
我没有看到变量s
的任何角色,除了设置一个可变数组,你有没有把这个控制器推到任何地方?也许:
SecViewController *s = [[SecViewController alloc] init];
s.myMutableArr= self.mutaArr;
navController setViewControllers:@[s] animated: NO ]; // Notice `s` replaced `dvc`
恕我直言,最好将值从一个控制器/视图传递到其他控制器/视图是使用会话(即Singleton类)。在swSegue.performBlock
块内的会话中设置值,并在viewDidLoad
的{{1}}中获取值。
修改强>:
查看this tutorial单例实现。在第二个示例中,SecViewController
可以是someProperty
。
为了获得黑屏,我只是注意到你没有反映your array
到navController
。
也许使用这个:
self.revealViewController
在- (void)pushFrontViewController:(UIViewController *)frontViewController animated:(BOOL)animated;
上推送navController
可能会解决黑屏问题。
修改强>
试试这样:
self.revealViewController
答案 1 :(得分:0)
我从您提供的代码中看到了一些问题:
您必须在segue的目标视图控制器中定义一个属性,该属性可以保存您的阵列并将其设置在源视图控制器的prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
方法中。这可确保您在转换之前设置数据结构(即阵列) 。您可以通过
UIViewController *viewController = [segue destinationViewController];
SecViewController *destination = (SecViewController *)viewController;
destination.arrayHoldingProperty = self.myArray;
此处假设您已在arrayHoldingProperty
课程中定义了SecViewController
。
完成第一步后,您可以使用performSegueWithIdentifier:@"whatever" sender:nil
方法从任何地方执行segue。
答案 2 :(得分:0)
您正在制作另一个SecViewController类的实例
class Demo
{
// --------------
//---------------
};
不要使用它而不是使用它:
SecViewController *s = [[SecViewController alloc] init];