应用程序崩溃点击iPhone的主页按钮

时间:2011-12-14 16:10:34

标签: iphone objective-c ios xcode ipad

在我的iPhone应用程序中,我有一个UIWebView,我从xml文件加载数据,加载后,如果我按下我的iPhone主页按钮,如果我尝试重新打开我的应用程序加载然后如果我点击后退按钮和再次加载webview,然后单击主页按钮尝试重新打开应用程序根本没有启动,它正在崩溃。在我的组织者中,崩溃报告是这样的:

libSystem.B.dylib               0x33c30176 cache_remove_with_block + 18
1   CoreFoundation                  0x33ad9e52 __NSCacheApplicationDidEnterBackgroundCallBack + 18
2   CoreFoundation                  0x33a779a4 __cfnote_callback + 20
3   CoreFoundation                  0x33a4711c __CFXNotificationPost_old + 396
4   CoreFoundation                  0x33a46dbc _CFXNotificationPostNotification + 112
5   Foundation                      0x3361cd1c -[NSNotificationCenter postNotificationName:object:userInfo:] + 64
6   UIKit                           0x320c1752 -[UIApplication _handleApplicationSuspend:eventInfo:] + 494
7   UIKit                           0x320667a6 -[UIApplication handleEvent:withNewEvent:] + 1910
8   UIKit                           0x32065ec2 -[UIApplication sendEvent:] + 38
9   UIKit                           0x32065900 _UIApplicationHandleEvent + 5084
10  GraphicsServices                0x33b0eefc PurpleEventCallback + 660
11  CoreFoundation                  0x33a556f8 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 20
12  CoreFoundation                  0x33a556bc __CFRunLoopDoSource1 + 160
13  CoreFoundation                  0x33a47f76 __CFRunLoopRun + 514
14  CoreFoundation                  0x33a47c80 CFRunLoopRunSpecific + 224
15  CoreFoundation                  0x33a47b88 CFRunLoopRunInMode + 52
16  GraphicsServices                0x33b0e4a4 GSEventRunModal + 108
17  GraphicsServices                0x33b0e550 GSEventRun + 56
18  UIKit                           0x32099322 -[UIApplication _run] + 406
19  UIKit                           0x32096e8c UIApplicationMain + 664

如何解决这个问题?这可能是什么原因? 任何帮助都要提前感谢。

1 个答案:

答案 0 :(得分:0)

我们遇到了同样的问题(在运行iOS 4.x的设备上只有btw ..) 它的原因是在缓存中使用了可变对象。我们在缓存中放置了一个NSMutableDictionary,然后对其进行操作。然后,当缓存被释放(要解除分配)时,似乎发生了一些事情,后来在暂停时崩溃了应用程序。

希望这也解决了你的问题!


<强>更新

我们通过this dev forum entry找到了解决方案。似乎iOS 4.3之前的NSCache未从通知中心取消注册。

我们通过创建NSCache的简单子类并实现-dealloc方法(ARC版本)来解决此问题:

- (void)dealloc;
{
    // NSCache had an issue on iOS prior to 4.3 where it didn't unregister from notifications and caused crashes
    // see https://devforums.apple.com/message/421845#421845
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

现在使用此类而不是NSCache,你应该没问题。手指交叉。 :)