iPhone崩溃只在设备没有连接到xcode时,如何理解崩溃日志?

时间:2011-11-24 02:02:03

标签: iphone xcode crash-log

在运行ios 5的设备上,我的应用效果很好,但在运行ios 4.2.1的设备上,我遇到了这个崩溃。 奇怪的是,只有在未连接到xcode时设备才会崩溃。 当从xcode运行时它可以工作,但是当我在没有xcode的情况下运行它时,应用程序正在工作,直到我调用该方法:

- (void)startLocationUpdates
{
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
    self.locationManager.distanceFilter = 1;
    self.locationManager.delegate = self;
    [self.locationManager startUpdatingLocation];
} 

CRASH LOG:

OS Version:      iPhone OS 4.2.1 (8C148)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x3830000f
Crashed Thread:  0

Thread 0 Crashed:
0   libobjc.A.dylib                 0x33479462 objc_msgSend + 14
1   CoreLocation                    0x34371430 -[CLLocationManager onClientEventLocation:] + 560
2   CoreLocation                    0x3436f68e -[CLLocationManager onClientEvent:supportInfo:] + 98
3   CoreLocation                    0x3436f804 OnClientEvent + 16
4   CoreLocation                    0x3436b522 CLClientInvokeCallback(__CLClient*, CLClientEvent, __CFDictionary const*) + 42
5   CoreLocation                    0x3436d3cc CLClientHandleDaemonDataLocation(__CLClient*, CLClientLocation const*, __CFDictionary const*) + 196
6   CoreLocation                    0x3436d512 CLClientHandleDaemonData(__CFMessagePort*, long, __CFData const*, void*) + 286
7   CoreFoundation                  0x33a813fe __CFMessagePortPerform + 242
8   CoreFoundation                  0x33a556f8 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 20
9   CoreFoundation                  0x33a556bc __CFRunLoopDoSource1 + 160
10  CoreFoundation                  0x33a47f76 __CFRunLoopRun + 514
11  CoreFoundation                  0x33a47c80 CFRunLoopRunSpecific + 224
12  CoreFoundation                  0x33a47b88 CFRunLoopRunInMode + 52
13  GraphicsServices                0x33b0e4a4 GSEventRunModal + 108
14  GraphicsServices                0x33b0e550 GSEventRun + 56
15  UIKit                           0x32099322 -[UIApplication _run] + 406
16  UIKit                           0x32096e8c UIApplicationMain + 664
17  MyApp                       0x00002762 0x1000 + 5986
18  MyApp                       0x00002720 0x1000 + 5920

2 个答案:

答案 0 :(得分:2)

在您销毁self之前,您确定self.locationManager.delegate = nil;是否一直存在并且设置self吗?

答案 1 :(得分:0)

如果您的设备已经包含在您的配置文件中,那么这可能会发生(可能至少在xcode 4.2上)。

首先,检查手机的“名称”是否与您个人资料中的“名称”相匹配(最后一次更新为xcode)。

  1. 打开Xcode
  2. 点击ORGANIZER open ORGANIZER in XCODE
  3. 选择设备 choose DEVICES
  4. 在LIBRARY下,单击“PROVISINING PROFILES”
  5. 阅读iOS TEAM PROVISIONING PROFILE的标题(您应该有一个设备“名称”列表)
  6. 您最后连接的设备应列在设备下(即使此刻未连接) steps 4 thru 6
  7. 检查您的设备是否列出(在您的配置文件中),其中包含与Xcode相同的“名称”

    我通过

    解决了我的问题
    1. 上线@ developer.apple.com,
    2. 登录会员区
    3. 选择iOS开发者,
    4. 然后在右侧菜单上选择CERTIFICATES,ETC和
    5. 从我的配置文件中编辑设备。 choosing device profile for editing
    6. 在XCODE中,在PROVISIONING PROFILES窗口(上图)中,单击REFRESH(右下角)
    7. 或者,您可以从配置文件(在developer.apple.com中)中禁用(排序类似删除)设备,然后从“全新”设备开始全面启动。但苹果对开发人员的行为非常挑剔,我不会去删除和重新创建设备,因为他们可能会开始对你的审批人员造成干扰,这会耗尽你的时间。

      清除你的钥匙串,特别是如果你发现像com.apple.kerberos.kdc com.apple.systemdefault这样的东西可能是另一种解决方案,特别是如果XCODE在其自身崩溃(Xcode有时因钥匙链垃圾而崩溃)。

      最后一招,重新安装xcode(你知道苹果,如果它不工作并删除首选项无法解决它,重新安装它)。