【发布时间】:2014-04-29 00:15:11
【问题描述】:
我正在开发一个应用程序,但我陷入了无法检索类中设置的 BOOL 值的地步。 我已经在这上面花费了太多时间,已经解决了所有我发现似乎涵盖了这个问题的问题。
这里的坏处是我得到了一些东西,但不是我需要的(我得到一个 0,我猜这意味着该值没有被正确检索,因为它应该是 1)。
我尝试过的事情是:
-
将指针传递给我的第一个类并像这样访问我的 BOOL:
//in some method self.pointerFirstClass.myBOOL; NSLog(@"%d", firstClass.myBOOL); => This gives 0!
通过将它(谈论指针)声明为我的第二类中的属性(并从我的第一类中导入 h. 文件,其中我的 BOOL 也被声明为属性):
@property FirstClass *pointerFirstClass;
但我用这个得到了 0。
-
我给的另一个镜头是在第一堂课中添加我的 BOOL 并在我的第二堂课中创建该类的实例
//in some method FirstClass *firstClass = [[FirstClass alloc] init]; if (firstClass.myBOOL){ //Do something } NSLog(@"%d", firstClass.myBOOL); => This gives 0!但我也得了 0。
由于布尔值是原始类型,就像在 C 中一样,我有点困惑,因为我是面向对象编程的新手,例如,我不知道如何为此创建一个 getter。
我还尝试在第一堂课中执行 - (BOOL)getBOOLValue 方法,并在第二堂课中调用此方法并将其分配给第二堂课中的 BOOL。 但结果并没有更好。
我错过了什么吗?
有没有一种我没有想到或还不知道的方法来获得我的价值?
我对如何解决这个问题的想法很少,IMO 应该不会那么难,所以我希望我只是把它放在一边。
编辑:
一些实际代码。我在两个名为 AppDelegate 的文件(是的,实际的)和 WelcomeViewController (所以是一个 VC)之间工作。
AppDelegate.h
@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
BOOL inRegion; //thought of this making my BOOL as a property of AppDelegate
}
@property (strong, nonatomic) UIWindow *window;
@property BOOL inRegion; //Declaring my BOOL here to make it accessible for another class
- (BOOL)getBOOLValue; //An attempt to pass my BOOL value
AppDelegate.m
- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
{
if (state == CLRegionStateInside)
{
self.inRegion = YES; //Set my BOOL to TRUE
}
else if (state == CLRegionStateOutside)
{
self.inRegion = NO; //Else set it to False
}
- (BOOL)getBOOLValue
{
return inRegion; //Tried to create a custome "getter"
}
WelcomeViewControler.m(我在 .h 文件中没有更改任何内容) 我说我尝试了很多东西,现在,这是我的代码的最后一个版本。
//Simply trying to do a Segue on a condition...
- (IBAction)onClick:(id)sender {
AppDelegate *appDelegate = [[AppDelegate alloc] init];
if (appDelegate.inRegion) {
[self performSegueWithIdentifier:@"WelcomeToDetection" sender:self];
}
else
{
//Do Nothing
}
}
- 如前所述,我想检索 AppDelegate 的 BOOL 值。
谢谢。
【问题讨论】:
-
bool 只是 1 或 0。默认情况下它的 0 是你的问题。
-
您是否在任何地方初始化
myBOOL的值?你期望得到什么? -
记录 BOOL 的便捷方式 ->
NSLog(@"Bool is: %@", myBool ? @"YES" : @"NO"); -
将您的值存储在单例中,然后从您可能需要的任何地方访问它;)
-
请记住,如果
firstClass为 nil,则对myBOOL的引用将返回零。 (当然,零值也表示“假”值,因此从打印的零值中没有一种或另一种方式的真实证据。
标签: ios objective-c boolean getter