2014-06-06 95 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