iPhone 应用程序在启动时崩溃,在堆栈跟踪中仅显示来自内置框架的消息

发布于 2024-08-27 19:37:54 字数 5434 浏览 4 评论 0 原文

我的应用程序有时会在启动时崩溃。在堆栈跟踪中,仅包含来自内置框架的消息。崩溃日志摘录:

OS Version:      iPhone OS 3.1.3 (7E18)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x000e6000
Crashed Thread:  0

Thread 0 Crashed:
0   CoreGraphics                       0x339305d8 argb32_image_mark_RGB32 + 704
1   CoreGraphics                       0x338dbcd4 argb32_image + 1640
2   libRIP.A.dylib                     0x320d99f0 ripl_Mark
3   libRIP.A.dylib                     0x320db3ac ripl_BltImage
4   libRIP.A.dylib                     0x320cc2a0 ripc_RenderImage
5   libRIP.A.dylib                     0x320d5238 ripc_DrawImage
6   CoreGraphics                       0x338d7da4 CGContextDelegateDrawImage + 80
7   CoreGraphics                       0x338d7d14 CGContextDrawImage + 364
8   UIKit                              0x324ee68c compositeCGImageRefInRect
9   UIKit                              0x324ee564 -[UIImage(UIImageDeprecated) compositeToRect:fromRect:operation:fraction:]
10  UIKit                              0x32556f44 -[UINavigationBar drawBackButtonBackgroundInRect:withStyle:pressed:]
11  UIKit                              0x32556b00 -[UINavigationItemButtonView drawRect:]
12  UIKit                              0x324ecbc4 -[UIView(CALayerDelegate) drawLayer:inContext:]
13  QuartzCore                         0x311cacfc -[CALayer drawInContext:]
14  QuartzCore                         0x311cab00 backing_callback
15  QuartzCore                         0x311ca388 CABackingStoreUpdate
16  QuartzCore                         0x311c978c -[CALayer _display]
17  QuartzCore                         0x311c941c -[CALayer display]
18  QuartzCore                         0x311c9368 CALayerDisplayIfNeeded
19  QuartzCore                         0x311c8848 CA::Context::commit_transaction(CA::Transaction*)
20  QuartzCore                         0x311c846c CA::Transaction::commit()
21  QuartzCore                         0x311c8318 +[CATransaction flush]
22  UIKit                              0x324f5e94 -[UIApplication _reportAppLaunchFinished]
23  UIKit                              0x324a7a80 -[UIApplication _runWithURL:sourceBundleID:]
24  UIKit                              0x324f8df8 -[UIApplication handleEvent:withNewEvent:]
25  UIKit                              0x324f8634 -[UIApplication sendEvent:]
26  UIKit                              0x324f808c _UIApplicationHandleEvent
27  GraphicsServices                   0x335067dc PurpleEventCallback
28  CoreFoundation                     0x323f5524 CFRunLoopRunSpecific
29  CoreFoundation                     0x323f4c18 CFRunLoopRunInMode
30  UIKit                              0x324a6c00 -[UIApplication _run]
31  UIKit                              0x324a5228 UIApplicationMain
32  Journaler                          0x000029ac main (main.m:14)
33  Journaler                          0x00002948 start + 44

文件 main.m 尽可能简单:

#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil); // line 14
    [pool release];
    return retVal;
}

我的应用程序崩溃的原因是什么?

JournalerAppDelegate.h

// ...

@interface JournalerAppDelegate : NSObject <UIApplicationDelegate> {
    // ...
    UINavigationController *navigationController;
    AccountsViewController *rootViewController;
    // ...
}

JournalerAppDelegate.m

// ...

@implementation JournalerAppDelegate
// ...
- (void)applicationDidFinishLaunching:(UIApplication *)application {
    // ...
    rootViewController = [[AccountsViewController alloc] initWithNibName:@"AccountsViewController" bundle:nil];
    navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];

    NSString *accountKey = // ...;
    if (accountKey) {
        LJAccount *account = // ...;
        if (account) {
            [rootViewController view]; // forces to load view
            [rootViewController openAccount:account animated:NO];
        }
    }

    [window addSubview:navigationController.view];
    [window makeKeyAndVisible];
}
// ...

AccountsViewController.h

// ...

@interface AccountsViewController : UIViewController</* ... */> {
    // ...
    NSMutableDictionary *cacheTabBarControllers;
    // ...
}

AccountsViewController.m

// ...

@implementation AccountsViewController
// ...
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle {
    if (self = [super initWithNibName:nibName bundle:nibBundle]) {
        cacheTabBarControllers = [[NSMutableDictionary alloc] initWithCapacity:1];
    }
    return self;
}
// ...
- (void)openAccount:(LJAccount *)account animated:(BOOL)animated {
    AccountTabBarController *tabBarController = [[cacheTabBarControllers objectForKey:account.title] retain];
    if (!tabBarController) {
        tabBarController = [[AccountTabBarController alloc] initWithAccount:account];
        [cacheTabBarControllers setObject:tabBarController forKey:account.title];
    }

    [self.navigationController pushViewController:tabBarController animated:animated];
    [tabBarController release];
}
// ...

My app some times crashes at start-up. In stack-trace only messages from built-in frameworks. An excerpt from a crash log:

OS Version:      iPhone OS 3.1.3 (7E18)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x000e6000
Crashed Thread:  0

Thread 0 Crashed:
0   CoreGraphics                       0x339305d8 argb32_image_mark_RGB32 + 704
1   CoreGraphics                       0x338dbcd4 argb32_image + 1640
2   libRIP.A.dylib                     0x320d99f0 ripl_Mark
3   libRIP.A.dylib                     0x320db3ac ripl_BltImage
4   libRIP.A.dylib                     0x320cc2a0 ripc_RenderImage
5   libRIP.A.dylib                     0x320d5238 ripc_DrawImage
6   CoreGraphics                       0x338d7da4 CGContextDelegateDrawImage + 80
7   CoreGraphics                       0x338d7d14 CGContextDrawImage + 364
8   UIKit                              0x324ee68c compositeCGImageRefInRect
9   UIKit                              0x324ee564 -[UIImage(UIImageDeprecated) compositeToRect:fromRect:operation:fraction:]
10  UIKit                              0x32556f44 -[UINavigationBar drawBackButtonBackgroundInRect:withStyle:pressed:]
11  UIKit                              0x32556b00 -[UINavigationItemButtonView drawRect:]
12  UIKit                              0x324ecbc4 -[UIView(CALayerDelegate) drawLayer:inContext:]
13  QuartzCore                         0x311cacfc -[CALayer drawInContext:]
14  QuartzCore                         0x311cab00 backing_callback
15  QuartzCore                         0x311ca388 CABackingStoreUpdate
16  QuartzCore                         0x311c978c -[CALayer _display]
17  QuartzCore                         0x311c941c -[CALayer display]
18  QuartzCore                         0x311c9368 CALayerDisplayIfNeeded
19  QuartzCore                         0x311c8848 CA::Context::commit_transaction(CA::Transaction*)
20  QuartzCore                         0x311c846c CA::Transaction::commit()
21  QuartzCore                         0x311c8318 +[CATransaction flush]
22  UIKit                              0x324f5e94 -[UIApplication _reportAppLaunchFinished]
23  UIKit                              0x324a7a80 -[UIApplication _runWithURL:sourceBundleID:]
24  UIKit                              0x324f8df8 -[UIApplication handleEvent:withNewEvent:]
25  UIKit                              0x324f8634 -[UIApplication sendEvent:]
26  UIKit                              0x324f808c _UIApplicationHandleEvent
27  GraphicsServices                   0x335067dc PurpleEventCallback
28  CoreFoundation                     0x323f5524 CFRunLoopRunSpecific
29  CoreFoundation                     0x323f4c18 CFRunLoopRunInMode
30  UIKit                              0x324a6c00 -[UIApplication _run]
31  UIKit                              0x324a5228 UIApplicationMain
32  Journaler                          0x000029ac main (main.m:14)
33  Journaler                          0x00002948 start + 44

File main.m is simple as possible:

#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil); // line 14
    [pool release];
    return retVal;
}

What my cause the app to crash?

JournalerAppDelegate.h:

// ...

@interface JournalerAppDelegate : NSObject <UIApplicationDelegate> {
    // ...
    UINavigationController *navigationController;
    AccountsViewController *rootViewController;
    // ...
}

JournalerAppDelegate.m:

// ...

@implementation JournalerAppDelegate
// ...
- (void)applicationDidFinishLaunching:(UIApplication *)application {
    // ...
    rootViewController = [[AccountsViewController alloc] initWithNibName:@"AccountsViewController" bundle:nil];
    navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];

    NSString *accountKey = // ...;
    if (accountKey) {
        LJAccount *account = // ...;
        if (account) {
            [rootViewController view]; // forces to load view
            [rootViewController openAccount:account animated:NO];
        }
    }

    [window addSubview:navigationController.view];
    [window makeKeyAndVisible];
}
// ...

AccountsViewController.h:

// ...

@interface AccountsViewController : UIViewController</* ... */> {
    // ...
    NSMutableDictionary *cacheTabBarControllers;
    // ...
}

AccountsViewController.m:

// ...

@implementation AccountsViewController
// ...
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle {
    if (self = [super initWithNibName:nibName bundle:nibBundle]) {
        cacheTabBarControllers = [[NSMutableDictionary alloc] initWithCapacity:1];
    }
    return self;
}
// ...
- (void)openAccount:(LJAccount *)account animated:(BOOL)animated {
    AccountTabBarController *tabBarController = [[cacheTabBarControllers objectForKey:account.title] retain];
    if (!tabBarController) {
        tabBarController = [[AccountTabBarController alloc] initWithAccount:account];
        [cacheTabBarControllers setObject:tabBarController forKey:account.title];
    }

    [self.navigationController pushViewController:tabBarController animated:animated];
    [tabBarController release];
}
// ...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

在你怀里撒娇 2024-09-03 19:37:54

看起来它在尝试绘制 UINavagationBar 的后退按钮时崩溃了。您的应用程序启动时是否有后退按钮?

您是否正在恢复上次运行的导航堆栈?
您是否正在创建一个不仅仅是根视图控制器的导航堆栈?

您的内存管理在所有需要的地方都是正确的吗?

Looks like its crashing while trying to draw the UINavagationBar's back button. Is there any reason your app would have a back button when it starts?

Are you restoring the navigation stack from a previous run?
Are you creating a navigation stack with more than just a root view controller.

Is your memory management correct in the all required places?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文