2013-12-19 81 views
0

也許有人可以爲我澄清這一點。整數值不會被方法改變

我有4個UITableViewControllers,第一個有一個屬性

@property (nonatomic, assign) int editStarted; 

我設置在FirstViewController該屬性:

-(id)init 
{ 
    // Call the superclass's designated initializer 
    self = [super initWithStyle:UITableViewStyleGrouped]; 
    if (self) { 

    editStarted = 0; // NO 
    } 
    return self; 
} 

現在,當我從視圖控制器1導航到2至3至4 ,並在FourthViewController中做這樣的事情:

FirstViewController *firstView = [[FirstViewController alloc] init]; 
    NSLog(@"editStarted: %d,",firstView.editStarted); 

NSLOG將打印0.(如果我給它的init另一個值,那麼它會打印出值)

所以早在FirstViewController我這樣做,將值更改爲1:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
editStarted = 1; 
} 

現在,當我從視圖控制器1導航到2至3至4的值並沒有變爲1,但仍然爲0.

這是標準行爲還是我做錯了什麼? 我想過從視圖控制器1通過editStarted到2到3到4的可能性,但我不確定這是否是正確的方法。這對我來說聽起來有點多餘。

回答

2

此:

FirstViewController *firstView = [[FirstViewController alloc] init]; 

創建同一類VC 1的新實例,但它不是您最初看到了同樣的情況,所以它有不同的設置。

您應該使用導航控制器來獲取「真正的」VC 1並記錄其設置。


將變量從一個VC傳遞到下一個是標準方法,但它取決於您要做的事情。在某些情況下,最好將值設置爲NSUserDefaults,以便可以從多個不同的屏幕檢查/使用/更改。

+0

。當然,這是有道理的!謝謝。通過使用導航控制器,你的意思是appDelegate.m,我定義了「 - (BOOL)應用程序:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 」etc? – Eloy

+0

只是爲了您的信息,我想從視圖控制器1到4,當我在4時,我想在VC1中顯示從2到4的數據。我使用2到4來進行特定的選擇。 – Eloy

+1

在VC中,'self.navigationController'會讓你進入導航控制器。代表關係適合於將選擇數據從2,3和4回傳給1。 – Wain

0

你創建相同類的新實例,以便爲其分配新內存,這就是爲什麼所有時間都顯示爲零。

讓你有更好的選擇父類的對象分配到子類/

以其他方式類的對象只有一次......