使用 SWRevealViewController 时应用崩溃
App is crashing while using SWRevealViewController
我将 SWRevealViewController 用于 滑出菜单 用于 滑出菜单仅从主屏幕启动 在注册页面中按下注册按钮后(即 运行 首次打开应用程序)。
当应用程序第二次 运行ning 时,它应该直接进入主屏幕,但应用程序崩溃了,我正在崩溃登录 ViewController.
_barBtnMenu.target = self.revealViewController;
_barBtnMenu.action = @selector(revealToggle:);
[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
NSInvalidArgumentException', reason:'-[__NSArrayM
insertObject:atIndex:]: object cannot be nil.
对于应用程序的第一次 运行 我正在使用 Present Modally Segue 从注册按钮。
在SWRevealViewController
- (SWRevealViewController*)revealViewController
{
UIViewController *parent = self;
Class revealClass = [SWRevealViewController class];
while ( nil != (parent = [parent parentViewController]) && ![parent isKindOfClass:revealClass] ) {}
return (id)parent;
}
虽然运行第一次使用它
parent 正在返回一个值,但对于第二个 运行 它正在返回 nil
如果有人能帮我解决这个问题。
提前致谢。
编辑
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSString *savedValue = [[NSUserDefaults standardUserDefaults]
stringForKey:@"email"];
if (savedValue != nil) {
UIStoryboard *storyboard = self.window.rootViewController.storyboard;
ViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"viewController"];
self.window.rootViewController =viewController;
[self.window makeKeyAndVisible];
} else {
NSLog(@"Sign Up screen opened");
}
return YES;
}
您正在尝试在您的应用中实现自动登录功能
对于第二次启动,您必须在 Appdelegate 中维护一个标志,表明用户是否已经登录,如果用户已经登录,您必须从应用程序委托中的 didfinishlaunchingwithoptions 函数移动到 SWRevealview 的父控制器。
为此,在登录和注册时将用户名和密码保存到 userdefaults
检查 didfinishlaunchingwithoptions 中的值
如果值存在则移动到 SWrevealview 的父级
感谢您的回复,
我通过将 SignUp 页面设为 Root 视图解决了这个问题
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSString *savedValue = [[NSUserDefaults standardUserDefaults]
stringForKey:@"email"];
if (savedValue == nil) {
UIStoryboard *storyboard = self.window.rootViewController.storyboard;
SignUpViewController *signUpViewController = [storyboard instantiateViewControllerWithIdentifier:@"signUpViewController"];
self.window.rootViewController = signUpViewController;
[self.window makeKeyAndVisible];
} else {
NSLog(@"Sign Up screen closed,Hom page opened");
}
return YES;
}
我将 SWRevealViewController 用于 滑出菜单 用于 滑出菜单仅从主屏幕启动 在注册页面中按下注册按钮后(即 运行 首次打开应用程序)。
当应用程序第二次 运行ning 时,它应该直接进入主屏幕,但应用程序崩溃了,我正在崩溃登录 ViewController.
_barBtnMenu.target = self.revealViewController;
_barBtnMenu.action = @selector(revealToggle:);
[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
NSInvalidArgumentException', reason:'-[__NSArrayM insertObject:atIndex:]: object cannot be nil.
对于应用程序的第一次 运行 我正在使用 Present Modally Segue 从注册按钮。
在SWRevealViewController
- (SWRevealViewController*)revealViewController
{
UIViewController *parent = self;
Class revealClass = [SWRevealViewController class];
while ( nil != (parent = [parent parentViewController]) && ![parent isKindOfClass:revealClass] ) {}
return (id)parent;
}
虽然运行第一次使用它 parent 正在返回一个值,但对于第二个 运行 它正在返回 nil
如果有人能帮我解决这个问题。 提前致谢。
编辑
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSString *savedValue = [[NSUserDefaults standardUserDefaults]
stringForKey:@"email"];
if (savedValue != nil) {
UIStoryboard *storyboard = self.window.rootViewController.storyboard;
ViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"viewController"];
self.window.rootViewController =viewController;
[self.window makeKeyAndVisible];
} else {
NSLog(@"Sign Up screen opened");
}
return YES;
}
您正在尝试在您的应用中实现自动登录功能
对于第二次启动,您必须在 Appdelegate 中维护一个标志,表明用户是否已经登录,如果用户已经登录,您必须从应用程序委托中的 didfinishlaunchingwithoptions 函数移动到 SWRevealview 的父控制器。
为此,在登录和注册时将用户名和密码保存到 userdefaults
检查 didfinishlaunchingwithoptions 中的值
如果值存在则移动到 SWrevealview 的父级
感谢您的回复,
我通过将 SignUp 页面设为 Root 视图解决了这个问题
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSString *savedValue = [[NSUserDefaults standardUserDefaults]
stringForKey:@"email"];
if (savedValue == nil) {
UIStoryboard *storyboard = self.window.rootViewController.storyboard;
SignUpViewController *signUpViewController = [storyboard instantiateViewControllerWithIdentifier:@"signUpViewController"];
self.window.rootViewController = signUpViewController;
[self.window makeKeyAndVisible];
} else {
NSLog(@"Sign Up screen closed,Hom page opened");
}
return YES;
}