我正在使用解析来存储和检索我的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,但我有点陷入困境。
答案 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]);
}
}];