Objective c 每次导航都会执行查询

Objective c 每次导航都会执行查询,objective-c,parse-platform,Objective C,Parse Platform,我在主菜单的ViewDidDisplay中有以下解析查询,它查询管理员是否通过解析登录。问题是,每次用户导航到菜单时都会执行查询,因为它是主屏幕;这是经常发生的事。这是一个查询,我是否将它放在一个if语句中,该语句基本上表示一旦登录,就停止查询,或者应该将它放在另一个方法中: - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; PFACL *roleACL = [PFACL ACL]; [roleACL

我在主菜单的ViewDidDisplay中有以下解析查询,它查询管理员是否通过解析登录。问题是,每次用户导航到菜单时都会执行查询,因为它是主屏幕;这是经常发生的事。这是一个查询,我是否将它放在一个if语句中,该语句基本上表示一旦登录,就停止查询,或者应该将它放在另一个方法中:

- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];

PFACL *roleACL = [PFACL ACL];
[roleACL setPublicReadAccess:YES];
PFRole *role = [PFRole roleWithName:@"Administrator" acl:roleACL];
[role saveInBackground];

if (![PFUser currentUser]) {
    // Create the log in view controller
    CustomLoginViewController *logInViewController = [[CustomLoginViewController alloc] init];
    [logInViewController setDelegate:self]; // Set ourselves as the delegate.

    // Create the sign up view controller
    CustomSignupViewController *signUpViewController = [[CustomSignupViewController alloc] init];
    [signUpViewController setDelegate:self]; // Set ourselves as the delegate

    // Assign our sign up controller to be displayed from the login controller
    [logInViewController setSignUpController:signUpViewController];

    // Present the log in view controller
    [self presentViewController:logInViewController animated:YES completion:NULL];
} else {
    PFQuery *queryRole = [PFRole query];
    [queryRole whereKey:@"name" equalTo:@"Administrator"];
    [queryRole getFirstObjectInBackgroundWithBlock:^(PFObject *object, NSError *error) {
        PFRole *role = (PFRole *)object;
        PFRelation *adminRelation = [role users];
        PFQuery *queryAdmins = [adminRelation query];
        [queryAdmins whereKey:@"objectId" equalTo:[PFUser currentUser].objectId];
        [queryAdmins getFirstObjectInBackgroundWithBlock:^(PFObject *object, NSError *error) {
            if (!error && [object.objectId isEqualToString:[PFUser currentUser].objectId]) {
                SelectUserViewController * GPVC = [[SelectUserViewController alloc] initWithNibName:@"SelectUserViewController" bundle:nil];
                [self presentViewController:GPVC animated:YES completion:nil];
            }

        }];
    }];
}
}


在shouldBeginSignUp部分,我还有另外一个问题。这真的很困扰我,我的导师不会提交我的应用程序。就目前的查询而言。

基本上只是感谢CrimsonChris,将下面的代码放在viewDidLoad中意味着查询只会在用户第一次进入主菜单时执行,而不是每次。解决方案。谢谢Chris,

您可能需要考虑将此代码放入一个单独的模型对象中,以处理您的web服务,特别是如果其他视图控制器将进行web调用。。。将那些非UI功能的相关部分组合在一个合适的模型中会更干净(并且符合MVC的精神)

您应该参考UIViewController文档以找到更合适的方法。这是ViewDidDisplay:的预期行为。您可以将此代码放在viewDidLoad方法中,但更好的位置是完全在此视图控制器之外。你在视图控制器中放的代码越少越好。你刚刚修复了它,克里斯,你终于做到了!哈哈