首次出现viewController时运行一段代码

时间:2014-04-01 01:33:35

标签: ios parsing viewcontroller viewdidload

我正在使用解析来存储和检索我的iOS应用程序的数据。我的代码如下。

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

    if (!error) {

        for (PFObject *item in objects) {

            self.postPlace.text =  [item objectForKey:@"place"];
        }
    }

    else {
        NSLog(@"Error: %@ %@", error, [error userInfo]);
    }
}];

但是,在第一个视图中,我希望以下代码为:

self.postPlace.text =  nil;

然后剩下的时间:

self.postPlace.text =  [item objectForKey:@"place"];

我该如何实现?我查看了viewDidLoad和viewDidAppear,但我有点陷入困境。

3 个答案:

答案 0 :(得分:1)

做这样的事情:

声明BOOL类型的Instance变量,我们称之为isFirst

viewDidLoad制作isFirst = FALSE;。然后在您viewWillAppear中执行此操作(请记住仅在第一次调用时viewDidLoad。但每次进入此viewWillAppear时都会调用viewController。因此请相应地规划您的代码。) :

    if (!isFirst) {
        self.postPlace.text =  nil;
        isFirst = !isFirst;
    }
    else{
        [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

            if (!error) {

                for (PFObject *item in objects) {
                    static BOOL flag = YES;
                    if (flag) {
                        self.postPlace.text = nil;
                    } else {
                        self.postPlace.text = [item objectForKey:@"place"];
                        flag = NO;
                    }
                }
            }

            else {
                NSLog(@"Error: %@ %@", error, [error userInfo]);
            }
        }];
    }

希望这有助于......:)

答案 1 :(得分:1)

由于我和其他两位作者(在撰写本文时)一直在讨论他们建议使用static局部变量的答案,我会根据自己的想法提供自己的答案。是一个更好的解决方案。

使用static局部变量来跟踪某些事情是否已经完成,将该类的实例数量限制为1,因为{{1}只能有一个实例每个进程的局部变量。这可能不是View Controller的问题,其中可能只需要一个实例,但是通常情况下会使用多个视图控制器实例并使用static局部变量会导致困难 - 在开发后期找到bug,特别是因为它不显眼

我的建议是使用一个实例变量来跟踪你的行为,允许该类的多个实例,并使你明显这样做,因为它出现在类static中喊出它的目的(如果正确命名) )。

因此:

@interface

并且在代码中(除非您真的觉得有必要,否则无需将其初始化为@interface MyViewController : UIViewController { BOOL _haveSetPostPlaceNil; } ),请使用:

NO

答案 2 :(得分:0)

我建议您使用static BOOL标志来执行此任务。

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

    if (!error) {

        for (PFObject *item in objects) {
            static BOOL flag = YES;
            if (flag) {
                self.postPlace.text = nil;
            } else {
                self.postPlace.text = [item objectForKey:@"place"];
                flag = NO;
            }
        }
    }

    else {
        NSLog(@"Error: %@ %@", error, [error userInfo]);
    }
}];