类X的布尔值在从类Y的视图控制器更改为类Z的视图控制器之间不会持久存在

时间:2012-12-07 17:17:57

标签: objective-c ios

在课程GHHaiku中,我有BOOL属性justComposed

mySecondViewControllerClass我有以下方法:

- (void)viewDidLoad
{
    [super viewDidLoad];
    if (!self.ghhaiku)
    {
        self.ghhaiku = [[GHHaiku alloc] init];
    }
    //Lots of other code
}

-(void)saveUserHaiku
{
    //Lots of code
    self.ghhaiku.justComposed=YES;
    NSLog(@"%d",self.ghhaiku.justComposed);
    [self.tabBarController setSelectedIndex:0]; //This switches to `myFirstViewController`
}

myFirstViewController我有以下方法:

-(void)viewDidLoad
{
[super viewDidLoad];
    if (!self.ghhaiku)
    {
        self.ghhaiku = [[GHHaiku alloc] init];
    }
}

- (void) viewWillAppear:(BOOL)animated
{
    NSLog(@"%d",self.ghhaiku.justComposed);
    if (self.ghhaiku.justComposedYes==YES)
    {
        [super viewWillAppear:animated];
        self.displayHaikuTextView.text = [[self.ghhaiku.arrayOfHaiku lastObject] valueForKey:@"quote"];
    }
}

BOOL中的saveUserHaiku中的mySecondViewController显示1 /是。但viewWillAppearmyFirstViewController中的布尔值显示为0 /否。

我要离开的是什么?

修改

这是我最终想要完成的事情:

myFirstViewControllerGHHaiku中实例化viewDidLoad。然后它在该实例化上创建arrayOfHaiku并使用x个haiku加载它。

saveUserHaiku中的mySecondViewController方法为该数组添加了ha句,设置了布尔justComposed' to YES , and then programmatically switches view controllers back to myFirstViewController。

我们回到myFirstViewController后,如果viewWillAppear中的justComposedmySecondViewController,则YES会调用某个函数。

两个视图控制器都是在Interface Builder中创建的。

第二次编辑:如果重要,这是一个标签式应用程序。 saveUserHaiku更改标签。

2 个答案:

答案 0 :(得分:2)

您似乎正在创建单独的ghhaiku实例 - 一个用于两个视图控制器。如果要在两个视图控制器之间使用相同的ghhaiku对象(从而记住justComposed布尔值),则需要在创建视图控制器时将ghhaiku属性设置为现有对象。不要在viewDidLoad中分配/初始化新的。

例如,如果您要从myFirstViewController显示mySecondViewControllerClass,它可能如下所示:

mySecondViewControllerClass *secondViewController = [[mySecondViewControllerClass alloc] initWithNibName:nil bundle:nil];
secondViewController.ghhaiku = self.ghhaiku; // pass the ghhaiku object to the other view controller
[self presentModalViewController:secondViewController animated:YES];

答案 1 :(得分:1)

为什么它有其他价值而不是NO?你有两个不同的类。在其中一个中,您将类成员的值设置为YES。然后在另一个类中,您检查具有相同名称的变量的值,但它是不同的,您从不为其分配任何内容,默认情况下它为NO