2014-06-06 63 views
0
启动

我已经宣布在viewcontroller.h数组:的NSMutableArray总是在负载

@property (nonatomic, strong) NSMutableArray *array; 

在viewcontroller.m我把这段代码控制器里面执行:

@synthesize array = _array; 

在viewDidLoad-方法我有这个开头:

if (_array == nil){ 
    NSLog(@"arr was null"); 
    _array = [[NSMutableArray alloc] init]; 
} 

在上面的代码后,我添加一个对象到muta BLE数组是这样的:

[_array addObject:@"1"]; 

然而,当我从控制器到另一个在模拟器中,_array永远是零,其分配从头阵列,所有的旧值消失。我究竟做错了什么?

更新: 我没有使用任何导航控制器。我使用模态推送。在CTRL2我覆盖的方法prepareForSegue把这个相关代码:

ViewController1 *ctrl1 = segue.destinationViewController; 
ctrl1.anothervar = 3; 

真正的“重定向”到CTRL1在CTRL2方法“的tableView”中完成的(当使用选择一个选项)。代码如下所示: [self performSegueWithIdentifier:@“select_game_to_ctrl1”sender:self];

的CTRL1被赋予了标识符“select_game_to_ctrl1”(通过故事板)

+1

请提供更多关于从一个控制器到另一个控制器的含义的信息。另外,粘贴你的viewDidLoad方法,以便我们可以看到它是否有任何问题。 –

+0

那你在干什么? – Apurv

+0

对不起。我删除了评论。我在故事板中有controller1和controller2。点击一个控制器上的按钮,带我到ctrl2的performSegueWithIdentifier帮助。 Ctrl1是第一个视图。在viewDidLoad中,我第一次去这个控制器时,数组应该被初始化。然后有按钮,它带我到ctrl2。从那里我回到ctrl1与performSegueWithIdentifier。我也在使用prepareForSegue ctrl2。所以我最后回到ctrl1并在viewDidLoad中再次初始化数组。 – user3355182

回答

0

你的问题是你正在浏览的方式。

如果您从VC Ctrl1转到ctrl2并使用segue,则不应通过另一个正常的segue从ctrl2返回到Ctrl1。所做的就是创建一个新的Ctrl1空白实例,并将其添加到其他视图控制器之上。由于您创建了一个新的Ctrl1实例,因此它的viewDidLoad方法被调用,并创建一个新的,不同的数组。 Ctrl1的另一个副本仍然存在,由ctrl2和刚刚创建的Ctrl1的新实例覆盖。

如何解决这个问题取决于你正在使用什么样的segue。如果你用一个push segue(由导航控制器管理)从Ctrl1到ctrl2,你应该设置从ctrl2返回到ctrl1作为一个弹出。

如果您已经通过presentModalViewController调用从Ctrl1转到ctrl2,那么您想要返回使用dismissViewControllerAnimated:completion:

第三个选项是设置一个unwind segue,但是当你直接返回刚刚来自的视图控制器时,这不是真的需要/适当的。

如果您需要更多帮助,请告诉我们您使用何种方式从Ctrl1到Ctrl2,并从Ctrl1发布您的prepareForSegue方法。

编辑:您的问题的解决方案是粗体上面。

+0

我已更新我的问题。你有看看吗? – user3355182

+0

好吧,但我不会从ctrl1到presentModalViewController的ctrl2。我使用performSegueWithIdentifier从ctrl1到ctrl2。所以你的意思是我需要更改ctrl1并使用presentModalViewController转到ctrl2?而当我在ctrl2中,我仍然需要在ctrl1中设置变量。那么我不会有同样的问题吗? – user3355182

+0

另外,我看到presentModalViewController已被弃用。这真的是要走的路吗?我想要的是从1到2.然后当我在2,我想在控制器1上设置一个变量,也回到它。通常的做法是什么? – user3355182