开发者

iPhone app crashes on start-up, in stack-trace only messages from built-in frameworks

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_FAIL开发者_Python百科URE 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];
}
// ...


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?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜