Ios 当viewController第一次出现时运行一段代码

Ios 当viewController第一次出现时运行一段代码,ios,parsing,viewcontroller,viewdidload,Ios,Parsing,Viewcontroller,Viewdidload,我正在使用parse从iOS应用程序中存储和检索数据。我的代码如下 [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { if (!error) { for (PFObject *item in objects) { self.postPlace.text = [item objectForKey:@"place"]; }

我正在使用parse从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和ViewDidDisplay,但我有点卡住了。

我建议您使用
静态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]);
    }
}];

这样做:

声明一个BOOL类型的实例变量,让我们调用它
isFirst

在您的
视图中,加载
make
isFirst=FALSE。然后在您的
视图中执行此操作将出现
(请记住
viewdiload
仅在第一次调用时才被调用。但是
viewdiload
每次进入此
viewController
时都会被调用。因此,请相应地规划您的代码。)


希望这有帮助……:)

由于我已经与其他两个(在撰写本文时)答案的作者就他们建议使用的
静态
局部变量进行了长时间的讨论,我将提供我自己的答案,以及我认为更好的解决方案

如果每个进程只能有一个
static
局部变量的实例,那么使用
static
局部变量来跟踪某件事情是否已经完成,会将类的实例数限制为一个。对于视图控制器来说,这可能不是一个问题,因为可能只需要一个实例,但是,在很多情况下,视图控制器的多个实例将被使用,并且使用
静态
局部变量将在以后的开发中导致一个难以发现的错误,特别是因为它非常不明显

我的建议是使用一个实例变量跟踪您的行为,允许类的多个实例,并使您明显地这样做,正如类
@interface
中显示的那样,大声说出它的用途(如果命名正确)

因此:

@interface MyViewController : UIViewController
{
    BOOL _haveSetPostPlaceNil;
}
在代码中(无需将其初始化为
no
,除非您确实感觉需要),使用:


为什么
static
而不是实例变量?这限制了这个类的实例数量。你能解释一下吗?这对我很有帮助。每个进程只能有一个
静态
变量的实例,因此使用一个实例可以限制一个类的实例数(一个)。改为使用实例变量,然后您可以拥有任意多个此类实例。@特洛伊敌人,谢谢,顺便说一句,我的全局变量是指所有方法都可以访问的类变量。再说一次,我认为根本不需要全局/类/静态作用域变量。实例变量是简单/明显/自记录的。为什么是静态变量而不是实例变量?这限制了您可以拥有此类实例的数量。@特洛伊木马,因为该视图将出现多次。而OP只想在第一次做点什么。因此,需要静态。另一种方法是创建实例变量。但是我认为静态变量就足够了。@trojanfoe
这限制了这个类的实例数量。
你能解释更多吗?使用
静态
是不好的做法,因为有一天当你忘记它时,它会给你带来一个丑陋的bug。另一个答案请参见我留下的评论。感谢您指出使用
static
变量时可能出现的错误。
@interface MyViewController : UIViewController
{
    BOOL _haveSetPostPlaceNil;
}
for (PFObject *item in objects) {
    if (!_haveSetPostPlaceNil) {
        self.postPlace.text = nil;
        _haveSetPostPlaceNil = YES;
    } else {
        self.postPlace.text = [item objectForKey:@"place"];
    }
}