6

我正在使用 Storyboard,我遇到了如下所示的错误,我的代码已成功执行,但它们没有页面显示或模拟器中的操作仅在启动图像后显示黑屏。

ClsMainPageAppDelegate.h

#import <UIKit/UIKit.h>

@interface ClsMainPageAppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end

ClsMainPageAppDelegate.m

#import "ClsMainPageAppDelegate.h"
#import "ClsMainPageViewController.h"
#import "ClsTermsandConditionViewController.h"

@implementation ClsMainPageAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.


NSUserDefaults *fetchDefaults = [NSUserDefaults standardUserDefaults];
int message = [fetchDefaults integerForKey:@"checkvalue"];
NSLog(@"Message Hello : %i",message);

if(message == 1)
{

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    ClsMainPageViewController *mvc = [storyboard instantiateViewControllerWithIdentifier:@"BeIinformedPage"];
    [(UINavigationController*)self.window.rootViewController pushViewController:mvc animated:NO];
    NSLog(@"Launched Home Page");


}
else
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    ClsTermsandConditionViewController *mvc = [storyboard instantiateViewControllerWithIdentifier:@"termsandConditionControl"];
    [(UINavigationController*)self.window.rootViewController pushViewController:mvc animated:NO];
    NSLog(@"Launched Terms and Conditions Page");
}
return YES;
}

错误

当我没有在 storybroad 中选择入口点时,我面临的这个错误是 Initial View Controller。

2013-07-17 19:38:12.749 BeInformed[1011:c07] Failed to instantiate the default view
controller for UIMainStoryboardFile 'MainStoryboard' - perhaps the designated entry
point is not set?
2013-07-17 19:38:16.127 BeInformed[1011:c07] Message Hello : 0
2013-07-17 19:38:18.333 BeInformed[1011:c07] Launched Terms and Conditions Page

错误

当我在 storybroad 中选择入口点时遇到的这个错误是 Initial View Controller (termsandConditionControl)

 2013-07-17 19:53:19.839 BeInformed[1057:c07] Message Hello : 0
 2013-07-17 19:53:26.175 BeInformed[1057:c07] - [ClsTermsandConditionViewController
 pushViewController:animated:]: unrecognized selector sent to instance 0x71b2f50
 2013-07-17 19:53:26.176 BeInformed[1057:c07] *** Terminating app due to uncaught 
 exception 'NSInvalidArgumentException', reason: '-[ClsTermsandConditionViewController  
 pushViewController:animated:]: unrecognized selector sent to instance 0x71b2f50'
4

3 回答 3

5

顺便说一句,我知道你已经解决了你的问题,但我只是想建议另一个流程。或者,您可以始终从标准初始场景开始(您可以在应用程序委托中不使用任何代码),但要viewWillAppear确定您是否需要条款和条件 (T&C),如果需要,则以模态方式呈现该单独场景(动画或非动画,如您所见)。您可以让用户确认 T&C,然后取消条款和条件场景,您将回到标准的“初始”场景。

如果您这样做,您的 T&C 将被取消,您不必以rootViewController编程方式更改,导航控制器的顶级场景始终保持为标准的“初始”场景,因此popToRootViewController可以毫不费力地工作当然,您不必隐藏 T&C 页面上的导航栏等。它还适用于一个流程,您可以在其中向用户提供再次查看 T&C 的选项(例如隐藏在“设置”或“ about”场景,如果你有合适的地方展示它)。

如果您想知道如何以编程方式进入 T&C,您可以定义从初始场景到 T&C 场景的转场:

创建转场

然后选择那个segue并给它一个标识符:

转义标识符

现在您的初始场景viewWillAppear可以performSegueWithIdentifier,例如:

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

    BOOL hasAcceptedTermsAndConditions = ...;

    if (!hasAcceptedTermsAndConditions)
    {
        [self performSegueWithIdentifier:@"TermsAndConditions" sender:self];
    }
}

很高兴您解决了您的问题,但我只是想建议一个替代流程。

于 2013-07-17T17:59:28.363 回答
4

终于解决了我的问题,我使用了这个代码

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    ClsTermsandConditionViewController *ivc = [storyboard instantiateViewControllerWithIdentifier:@"termsandConditionControl"];
    UINavigationController *navigationController=[[UINavigationController alloc] initWithRootViewController:ivc];
    self.window.rootViewController=nil;
    self.window.rootViewController = navigationController;
    [navigationController setNavigationBarHidden:YES];
    [self.window makeKeyAndVisible];
于 2013-07-17T19:50:42.087 回答
0

好的可能的原因是,您可能错过了将身份检查器中的类/控制器名称分配给故事板中的控制器。接下来还要在您的 plist 文件中检查您是否有带有故事板正确名称的故事板条目。

希望这有效。:)

于 2013-07-17T18:00:53.880 回答