2011-08-29 132 views
0

我可以知道如何將一個BOOL變量從一個類共享到另一個類?從另一個類設置BOOL屬性

這是我正在做的。我在SecondVC設置FirstVC的BOOL變量。當我嘗試更改BOOL值時,我在這裏做錯了什麼,因爲應用程序崩潰。沒有錯誤日誌。

FirstVC.h

@interface FirstVC : UIViewController <UITextFieldDelegate>{ 
    BOOL pickUpAddressIsSet; 

} 

@property (nonatomic) BOOL pickUpAddressIsSet; 
@end 

FirstVC.m

@synthesize pickUpAddressIsSet; 

secondVC.m

NSArray *viewControllers = [self.navigationController viewControllers]; 
FirstVC *firstVC = (FirstVC *)[viewControllers objectAtIndex:viewControllers.count - 2]; 
firstVC.pickUpAddressIsSet = YES; // tried TRUE & 1 
+0

您確定導航堆棧中至少有兩個元素?您可能會將索引超出數組範圍 – Perception

+0

@Perception是。我能夠使用firstVC對象設置我的NSString變量之一。 SecondVC被推到FirstVC之上,這是rootVC。 – John

+0

請從.h文件中發佈* pickUpAddressIsSet * ivar和屬性的確切聲明。 – Perception

回答

0

試試這個:

@property(nonatomic, assign, getter= isPickUpAddressIsSet) BOOL pickUpAddressIsSet; 

它適用於我

+0

我試着設置setter方法的名字,但也無濟於事。 – John

0

看起來好像firstVC實例不是類型(類)FirstVC,這將解釋錯誤。

嘗試以下操作:

NSArray *viewControllers = [self.navigationController viewControllers]; 
id firstVC = [viewControllers objectAtIndex:viewControllers.count - 2]; 
NSLog(@"%@", [firstVC class]); 

你在的NSLog輸出看到什麼樣的課嗎?

+0

NSLog輸出爲FirstVC。假設對象是正確的,因爲我可以設置一個NSString? – John

+0

在這種情況下,它似乎是正確的。 –

0
firstVC.pickUpAddressIsSet: = YES; 

應該

firstVC.pickUpAddressIsSet = YES; 

冒號不應該存在。

+0

對不起,這是一個錯字錯誤。我已經嘗試過'firstVC.pickUpAddressIsSet = YES/TRUE/1'&'[firstVC setPickUpAddressIsSet:YES]'似乎並不奏效...... – John

+0

在這種情況下,我同意其他人的看法,這意味着問題出現在我們看不到的某個部分。如果您嘗試[firstVC respondsToSelector:@selector(setPickUpAddressIsSet)],會發生什麼情況; – jrturton

+0

另外,設置一個斷點並逐步執行代碼,崩潰沒有任何錯誤似乎很奇怪,您可以通過這種方式獲得更多信息。 – jrturton

0

我發現,這是因爲我試圖在代碼的其他部分NSLog BOOL變量作爲字符串。

相關問題