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 中的方法不存储数组的主要内容,如果未能解决你的问题,请参考以下文章

不存数据库生成验证码(totp算法)

java set重复值是不存还是覆盖

如何将 RootViewController 设置为 SplitViewController 中的分组表

Objective-C中的rootViewController和addSubview?

rootviewcontroller 中的 UINavigationController presentModalViewController 没有出现动画

在自定义 UINavigationController 中强制执行特定 rootViewController 的推荐方法是啥?