gpt4 book ai didi

ios - 传递 BOOL 值

转载 作者:可可西里 更新时间:2023-11-01 05:21:29 24 4
gpt4 key购买 nike

我正在开发一个应用程序,我被困在我似乎无法检索类中 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。

由于 boolean 值是基本类型,就像在 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 值。

谢谢。

最佳答案

这段代码没有意义:

self.pointerFirstClass.myBOOL;
NSLog(@"%d", firstClass.myBOOL); => This gives 0!

第一行没有做任何事情。您没有为属性分配任何内容,也没有对值进行任何操作。此外,从您提供的代码中我们可以看出,第二行与第一行没有任何关系。试试这个:

self.pointerFirstClass = [[FirstClass alloc] init];
self.pointerFirstClass.myBOOL = YES;
NSLog(@"myBOOL = %d", self.pointerFirstClass.myBOOL);

换句话说,您需要确保self.pointerFirstClass 指向一个有效的对象。然后您需要确保已将所需的值分配给该对象的 myBOOL 属性。

更新:这看起来像是您在与错误的对象交谈的情况。看看这个:

- (IBAction)onClick:(id)sender {
AppDelegate *appDelegate = [[AppDelegate alloc] init];

这肯定不是您真正想要的。应用程序对象是单个对象——真正的单例,实际上意味着存在并且只能有一个应用程序对象。该对象有一个委托(delegate)对象,它是您的 AppDelegate 类的特定实例。不过,在此代码中,您将创建一个新的 AppDelegate 实例,该实例与应用程序正在使用的实例不同。为响应来自应用程序的消息而对实际应用程序委托(delegate)所做的任何更改都不会反射(reflect)在您创建的新对象中。

我想你想要的是获取实际的应用程序委托(delegate)对象,你可以使用:

[[UIApplication sharedApplication] delegate];

因此,将您的代码更改为如下所示:

- (IBAction)onClick:(id)sender {
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];;

if (appDelegate.inRegion) {
[self performSegueWithIdentifier:@"WelcomeToDetection" sender:self];
}
// note: you don't need an else clause if it doesn't do anything
}

这样,您将与应用程序使用的同一个对象对话,该对象具有响应位置管理器调用而设置的 inRegion 属性。

关于ios - 传递 BOOL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22561981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com