Ios 在演示过程中演示?尝试在使用parse登录facebook后显示新视图。

Ios 在演示过程中演示?尝试在使用parse登录facebook后显示新视图。,ios,objective-c,xcode,Ios,Objective C,Xcode,我试图展示一个我已经为用户制作的UITableView,以便用户输入数据并保存在解析中。我很确定我没有显示导航视图 当我登录时,我得到错误信息: Checklists[4516:c07] Warning: Attempt to present <ChecklistsViewController: 0x10525e90> on <UINavigationController: 0x9648270> while a presentation is in progress!

我试图展示一个我已经为用户制作的UITableView,以便用户输入数据并保存在解析中。我很确定我没有显示导航视图

当我登录时,我得到错误信息:

Checklists[4516:c07] Warning: Attempt to present <ChecklistsViewController: 0x10525e90> 
on <UINavigationController: 0x9648270> while a presentation is in progress!
检查表[4516:c07]警告:试图显示
演示正在进行时打开!
谢谢你的帮助

#import "LoginViewController.h"
#import "ChecklistsViewController.h"
#import "SetupViewController.h"
#import <Parse/Parse.h>

@interface LoginViewController ()

@end

@implementation LoginViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

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

    PFLogInViewController *login = [[PFLogInViewController alloc] init];
    login.fields = PFLogInFieldsFacebook;
    // Need to set the delegate to be this controller.
    login.delegate = self;
    login.signUpController.delegate = self; //signUpController is a property on the login view controller
    [self presentModalViewController:login animated:NO];

}

    - (void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user
{
    [self dismissModalViewControllerAnimated:YES];
    NSLog(@"Successfully logged in.");
    ChecklistsViewController *controller = [[ChecklistsViewController alloc] initWithStyle:UITableViewStylePlain];
    controller.modalTransitionStyle = UITableViewStylePlain;
    [self presentModalViewController:controller animated:YES];

}
#导入“LoginViewController.h”
#导入“ChecklistsViewController.h”
#导入“SetupViewController.h”
#进口
@接口LoginViewController()
@结束
@实现LoginViewController
-(id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil
{
self=[super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
如果(自我){
//自定义初始化
}
回归自我;
}
-(无效)视图显示:(BOOL)动画
{
[超级视图显示:动画];
PFLogInViewController*login=[[PFLogInViewController alloc]init];
login.fields=PFLogInFieldsFacebook;
//需要将委托设置为此控制器。
login.delegate=self;
login.signUpController.delegate=self;//signUpController是登录视图控制器上的一个属性
[自我呈现Modalviewcontroller:登录动画:否];
}
-(无效)logInViewController:(PFLogInViewController*)logInController didLogInUser:(PFUser*)用户
{
[自我解散Modalviewcontrolleranimated:是];
NSLog(@“已成功登录”);
ChecklistsViewController*controller=[[ChecklistsViewController alloc]initWithStyle:UITableViewStylePlain];
controller.modalTransitionStyle=UITableViewStylePlain;
[self-presentModalViewController:控制器已设置动画:是];
}

此方法已被弃用了很长一段时间

     presentModalViewController:animated:
你应该用这个来代替

    presentViewController:animated:completion:
这个也一样

    dismissModalViewControllerAnimated:
现在我们用这个

    dismissViewControllerAnimated:completion:
当我们不需要完成块时,我们只需将其设置为nil

但在你的情况下,完成块可以解决你的问题。。。它确保了事件的正确顺序,即在解雇完成之前不会进行演示

    - (void)logInViewController:(PFLogInViewController *)logInController 
                   didLogInUser:(PFUser *)user
{
    [self dismissViewControllerAnimated:YES completion:^{
        NSLog(@"Successfully logged in.");
        ChecklistsViewController *controller = 
              [[ChecklistsViewController alloc] initWithStyle:UITableViewStylePlain];
        controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
        [self presentViewController:controller animated:YES completion:nil];
    }];

}

[NB-modalTransitionStyle在您的原始代码中不正确,我也对其进行了更改。感谢您指出这一点]

谢谢!非常彻底。如果您不介意的话,我还有一个错误,它是在实现您的解决方案后突然出现的。“警告:试图在其视图不在窗口层次结构中的对象上显示!”尚未看到此选项。@STANGMMX-我需要了解有关您的应用程序的更多信息-它将引用什么
UINavigationController
(或子类)?也许会提出另一个问题,展示更多的信息,比如你的故事板,任何其他线索。。尽管有一件事需要尝试,那就是将代码移出ViewDidDisplay,但当您关闭登录屏幕时调用ViewDidDisplay时,您会遇到一种混乱的情况。或者做一个BOOL标志,以确保在您取消登录后不会尝试重新显示您的登录。