iPhone 应用程序在启动时崩溃,在堆栈跟踪中仅显示来自内置框架的消息
我的应用程序有时会在启动时崩溃。在堆栈跟踪中,仅包含来自内置框架的消息。崩溃日志摘录:
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];
}
// ...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
看起来它在尝试绘制
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?