【问题标题】:App terminates after viewcontroller calls the delegate to close the view应用程序在 viewcontroller 调用委托关闭视图后终止
【发布时间】:2011-03-21 02:30:42
【问题描述】:

这里的情况:我有一个视图控制器,它在函数“viewDidLoad”中调用 AppDelegateIphone 中的一个函数来终止这个视图。 问题是,如果我这样做,就会出现这个异常:

splashScreen.view = nil;



    *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "SplashScreenController_iPhone" nib but the view outlet was not set.'
*** Call stack at first throw:
(
 0   CoreFoundation                      0x029dc919 __exceptionPreprocess + 185
 1   libobjc.A.dylib                     0x02b2a5de objc_exception_throw + 47
 2   CoreFoundation                      0x02995078 +[NSException raise:format:arguments:] + 136
 3   CoreFoundation                      0x02994fea +[NSException raise:format:] + 58
 4   UIKit                               0x0062a09c -[UIViewController _loadViewFromNibNamed:bundle:] + 295
 5   UIKit                               0x00627cd1 -[UIViewController loadView] + 120
 6   UIKit                               0x00627bab -[UIViewController view] + 56
 7   regioappv2                          0x00003085 -[AppDelegate_iPhone application:didFinishLaunchingWithOptions:] + 97
 8   UIKit                               0x00580543 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1163
 9   UIKit                               0x005829a1 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 346
 10  UIKit                               0x0058c452 -[UIApplication handleEvent:withNewEvent:] + 1958
 11  UIKit                               0x00585074 -[UIApplication sendEvent:] + 71
 12  UIKit                               0x00589ac4 _UIApplicationHandleEvent + 7495
 13  GraphicsServices                    0x030bfafa PurpleEventCallback + 1578
 14  CoreFoundation                      0x029bddc4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
 15  CoreFoundation                      0x0291e737 __CFRunLoopDoSource1 + 215
 16  CoreFoundation                      0x0291b9c3 __CFRunLoopRun + 979
 17  CoreFoundation                      0x0291b280 CFRunLoopRunSpecific + 208
 18  CoreFoundation                      0x0291b1a1 CFRunLoopRunInMode + 97
 19  UIKit                               0x00582226 -[UIApplication _run] + 625
 20  UIKit                               0x0058db58 UIApplicationMain + 1160
 21  regioappv2                          0x000028b4 main + 102
 22  regioappv2                          0x00002845 start + 53
)
terminate called after throwing an instance of 'NSException'
Program received signal:  “SIGABRT”.

如果我在 appDelegate 本身中使用 splashScreen.view = nil; 调用该函数,那么一切正常。

请告诉我我的错在哪里,或者我应该发布更多代码。

问候

【问题讨论】:

    标签: iphone uiviewcontroller terminate


    【解决方案1】:
    已加载“SplashScreenController_iPhone”笔尖,但未设置视图出口。

    您是否在界面生成器中制作了视图出口?似乎您没有正确设置它。而且从堆栈跟踪中,很明显 viewDidLoad 还没有被调用,因为视图还没有被成功加载。

    【讨论】:

    • 视图是在 viewController 的 viewDidLoad 中以编程方式创建的。所以这两种情况都没有给出。
    • 那你为什么要从笔尖加载它?如果你 initFromNib,那么你必须在 nib 中设置视图。因为视图必须在调用 viewDidLoad 之前加载。
    • 我不知道为什么会出现这条消息,我没有在任何地方使用笔尖。视图的初始化是这样的: splashScreen = [[[SplashScreenController_iPhone alloc] init] autorelease];
    • 尝试在 loadView 方法而不是 viewDidLoad 方法中加载您的视图,并且不要调用 super。 (虽然我之前没有尝试过)。
    • 来自手册,“如果手动指定视图,则必须实现 loadView 方法并使用它将根视图对象分配给视图属性”
    猜你喜欢
    • 2013-10-29
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 2013-11-16
    • 1970-01-01
    相关资源
    最近更新 更多