Ios 如何将NSMutableArray传递给另一个视图
下面的代码片段是Ios 如何将NSMutableArray传递给另一个视图,ios,objective-c,swrevealviewcontroller,Ios,Objective C,Swrevealviewcontroller,下面的代码片段是prepareForSegue方法的一部分。在这种情况下,我想将self.mutaArr(MutableArray)传递给SecViewController(这是一个UIViewController) 由于以下行,无法通过此操作: [navController设置视图控制器:@[dvc]动画:否] 如果我通过了s我最终会得到一个黑屏。因此,如何对其进行排序 请注意,我也在使用SWRevealViewController if ([segue isKindOfClass:[SWRe
prepareForSegue
方法的一部分。在这种情况下,我想将self.mutaArr
(MutableArray)传递给SecViewController
(这是一个UIViewController
)
由于以下行,无法通过此操作:
[navController设置视图控制器:@[dvc]动画:否]代码>
如果我通过了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`
在IMHO中,将值从一个控制器/视图传递到另一个控制器/视图的最佳方法是使用会话(即Singleton类)。在swSegue.performBlock
块内的会话中设置值,并在SecViewController
的viewdiload
中获取值
编辑:
请查看有关单例实现的详细信息。在第二个示例中,someProperty
可以是数组
对于黑屏,我注意到您没有将navController
反映到self.revealViewController
也许用这个:
- (void)pushFrontViewController:(UIViewController *)frontViewController animated:(BOOL)animated;
按下self上的navController
。revealViewController
可能会修复黑屏问题
编辑:
试着这样做:
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的目标视图控制器中定义一个可以容纳数组的属性,并在源视图控制器的prepareforsgue:(UIStoryboardSegue*)segue sender:(id)sender
方法中进行设置。这确保您在转换之前设置数据结构(即数组)。您可以通过执行以下操作来检索segue的目标视图控制器
UIViewController *viewController = [segue destinationViewController];
SecViewController *destination = (SecViewController *)viewController;
destination.arrayHoldingProperty = self.myArray;
这里假设您已经在SecViewController
类中定义了arrayHoldingProperty
完成第一步后,您可以使用performsguewithidentifier:@“which”sender:nil
方法从任何地方执行segue
您正在创建SecViewController类的另一个实例
SecViewController *s = [[SecViewController alloc] init];
不要使用此选项,而要使用此选项:
SecViewController *s = (SecViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"SecViewController"];
s.myMutableArr= self.mutaArr;
在这个过程中,什么是svc?当您切换到查看dvc
时,s
应该是什么?为什么您首先在prepareForSegue
中使用setViewControllers
?另外,您从不使用s
变量,因此,self.mutaArr
没有在任何地方传递也就不足为奇了。有一点,如果确实要将其放在单例中,当然只需将其放在AppDelegate中即可。只要在AppDelegate.h中添加一个属性就可以了。当我设置@['s']
时,我会看到一个空白屏幕。你能给我看一个关于如何设置单例类的详细例子吗?你能给我看一下如何通过它吗。我有点困惑。我得到了这个错误,SWRevealViewController'的@interface声明选择器“pushFrontViewController:animated:”
是否使用此控件:请参见基本API描述部分中的此函数列表。您可能需要更新此API吗?