【问题标题】:iPhone crash only when device not connected to xcode, how to understand the crash log?iPhone仅在设备未连接到xcode时崩溃,如何理解崩溃日志?
【发布时间】:2011-11-24 02:02:03
【问题描述】:

在运行 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];
} 

崩溃日志:

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

【问题讨论】:

    标签: iphone xcode crash-log


    【解决方案1】:

    您确定self 在您使用它时一直存在并且您在销毁self 之前设置了self.locationManager.delegate = nil;

    【讨论】:

    • self 是一个 viewController,直到应用程序完成。但是你足够接近我发现问题不在 startLocationUpdates 而是在 stopLocationUpdates: - (void)stopLocationUpdates { [self.locationManager stopUpdatingLocation]; self.locationManager.delegate = nil; self.locationManager = nil;
    • 很高兴这停止了;)我对加速度计也有同样的问题:你杀死了从硬件接收数据的对象,但硬件试图继续发送它的数据。这就是崩溃的原因。
    【解决方案2】:

    如果您在将设备包含在您的配置文件中之后对其进行了维修,则可能会发生这种情况(至少在 xcode 4.2 上)。

    首先,检查您手机的“姓名”是否与您个人资料中的“姓名”匹配(上次在 xcode 中更新时)。

    1. 打开 Xcode
    2. 点击组织者
    3. 选择设备
    4. 在 LIBRARY 下,单击 PROVISINING PROFILES
    5. 读取 iOS TEAM PROVISIONING PROFILE 的标题(您应该有设备“名称”列表)
    6. 您最后连接的设备应列在设备下(即使目前未连接)

    检查您的设备是否与 Xcode 读取的“名称”相同(在您的配置文件中)

    我解决了我的问题

    1. 上线@developer.apple.com,
    2. 登录会员区,
    3. 选择 iOS 开发者,
    4. 然后在右侧菜单中选择 CERTIFICATES、ETC 和
    5. 从我的配置文件编辑设备。
    6. 在 XCODE 中,在 PROVISIONING PROFILES 窗口(上图)中,单击 REFRESH(右下角)

    或者,您可以从您的配置文件(在 developer.apple.com 中)禁用(有点像删除)该设备,然后重新开始,就像使用“新”设备一样。但是苹果对开发者的行为真的很挑剔,它不会到处删除和重新创建设备,因为它们可能会开始对你的审批进行人为干扰,这会占用你的时间。

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

    最后的手段,重新安装 xcode(你知道苹果,如果它不起作用并且删除首选项不能解决它,请重新安装它)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      相关资源
      最近更新 更多