RootViewController 中的方法不存储数组
Posted
技术标签:
【中文标题】RootViewController 中的方法不存储数组【英文标题】:Method in RootViewController not Storing Array 【发布时间】:2010-06-14 18:12:22 【问题描述】:我有一个在我的 RootViewController 中初始化的数组和一个将对象添加到数组的方法。我在我的 SecondViewController 中创建了一个 RootViewController 对象。该方法运行(输出一条消息),但它没有向数组添加任何内容,并且数组似乎是空的。代码如下,有什么建议吗?
RootViewController.h
#import "RootViewController.h"
#import "SecondViewController.h"
@implementation RootViewController
- (void)viewDidLoad
[super viewDidLoad];
myArray2 = [[NSMutableArray alloc] init];
NSLog(@"View was loaded");
-(void)addToArray2
NSLog(@"Array triggered from SecondViewController");
[myArray2 addObject:@"Test"];
[self showArray2];
-(void)showArray2
NSLog(@"Array Count: %d", [myArray2 count]);
-(IBAction)switchViews
SecondViewController *screen = [[SecondViewController alloc] initWithNibName:nil bundle:nil];
screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:screen animated:YES];
[screen release];
SecondViewController.m
#import "SecondViewController.h"
#import "RootViewController.h"
@implementation SecondViewController
-(IBAction)addToArray
RootViewController *object = [[RootViewController alloc] init];
[object addToArray2];
-(IBAction)switchBack
[self dismissModalViewControllerAnimated:YES];
编辑******************
使用马特的代码我得到了以下错误:
" 'RootViewController' 之前的预期说明符限定符列表"
【问题讨论】:
【参考方案1】:您在这里遗漏了一些非常重要的基础知识。如果您在 SecondViewController 中分配一个新的 RootViewController,它与您用于创建 SecondViewController 的实例不同,因此它不会引用您要添加对象的数组。你试图做的事情是行不通的。您必须在 SecondViewController 中为您的 RootViewController 创建一个 ivar,然后在第二个视图中访问它。像这样的:
-(IBAction)switchViews
SecondViewController *screen = [[SecondViewController alloc]
initWithNibName:nil bundle:nil];
screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[screen setRootViewController:self];
[self presentModalViewController:screen animated:YES];
[screen release];
你的 ivar 需要在 SecondViewController.h 中这样声明:
@property (nonatomic, retain) RootViewController *rootViewController;
然后在.m中合成
然后,您可以从 SecondViewController 中访问 ivar:
-(IBAction)addToArray
[[self rootViewController] addToArray2];
【讨论】:
让我问你。 [screen setRootViewController:self] 做什么?在我看来,这行代码几乎使加载 SecondViewController nib 时的 RootViewController 成为本机控制器? 它只是为您的 SecondViewController 提供对 RootViewController 的引用,以便它可以访问它并调用它的 -addToArray2 方法您创建的。我不确定您所说的 native 控制器是什么意思。 没关系,你消除了我的困惑 :) 我会试试这个。谢谢你的解释。 Matt:我尝试按照你说的做,但出现以下错误:错误:“RootViewController”之前的预期说明符限定符列表 这是一个语法错误。正如我在最初的帖子中所说,您在这里缺少一些非常重要的基础知识。我很高兴为您提供帮助,但是,您必须先爬行,然后才能走路。获取这本书:amazon.com/Beginning-iPhone-Development-Exploring-SDK/dp/… 它不会回答您的确切问题,但会帮助您确定这些基础知识。以上是关于RootViewController 中的方法不存储数组的主要内容,如果未能解决你的问题,请参考以下文章
如何将 RootViewController 设置为 SplitViewController 中的分组表
Objective-C中的rootViewController和addSubview?
rootviewcontroller 中的 UINavigationController presentModalViewController 没有出现动画
在自定义 UINavigationController 中强制执行特定 rootViewController 的推荐方法是啥?