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

发布于 2024-12-17 21:12:32 字数 2259 浏览 1 评论 0原文

在运行 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

On a device running ios 5 my app works great, but on a device running ios 4.2.1 i get this crash.
The strange thing is that the device crash only when NOT connected to xcode.
When run from xcode it work but when i run it without xcode the app is working till the moment i call the method:

- (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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

青芜 2024-12-24 21:12:32

您确定 self 在您使用它时一直处于活动状态,并且在销毁 self 之前设置了 self.locationManager.delegate = nil; 吗?

Are you sure that self is living all the time you use it and you set self.locationManager.delegate = nil; before you destroy self?

风启觞 2024-12-24 21:12:32

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

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

  1. 打开 Xcode
  2. 单击 ORGANIZER
    在 XCODE 中打开 ORGANIZER
  3. 选择设备
    choose DEVICES
  4. 在“库”下,单击“配置配置文件”,
  5. 读取 iOS 团队配置配置文件的标题(您应该有一个设备列表“名称”)
  6. 您最后连接的设备应列在设备下(即使目前尚未连接)
    steps 4 thru 6

检查您的设备是否以与 Xcode 相同的“名称”列出(在您的配置文件中)阅读它,

我解决了我的问题,方法

  1. 是上网@developer.apple.com,
  2. 登录会员区域,
  3. 选择iOS开发人员,
  4. 然后在右侧菜单上选择证书等,然后
  5. 从我的配置文件中编辑设备。
    选择要编辑的设备配置文件
  6. 在 XCODE 中,在“配置配置文件”窗口(上图)中,单击“刷新”(右下角)

,您可以从配置文件(位于developer.apple.com)中禁用(类似于删除)该设备,然后重新开始,就像使用“新”设备一样。但苹果对开发人员的行为非常挑剔,我不会到处删除和重新创建设备,因为他们可能会开始对您的审批进行人为干扰,这会耗尽您的时间。

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

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

if you have had your device serviced AFTER it was included in your provisioning profile, this MIGHT happen (at least on xcode 4.2).

first, check to see if your phone's "name" matches the "name" in your profile (when last updated in xcode).

  1. open Xcode
  2. click on ORGANIZER
    open ORGANIZER in XCODE
  3. choose DEVICES
    choose DEVICES
  4. under LIBRARY, click PROVISINING PROFILES
  5. read the header for the iOS TEAM PROVISIONING PROFILE (you should have a list of device "names")
  6. your last connected device should be listed under devices (even if it isnt connected at the moment)
    steps 4 thru 6

check to see if your device is listed (in your provisioning profile) with the same "name" that Xcode reads on it

i solved my problem by

  1. going online @ developer.apple.com,
  2. logging into the member area,
  3. choosing iOS developer,
  4. then picking CERTIFICATES, ETC on the right hand menu and
  5. editing the the device from my provisioning profile.
    choosing device profile for editing
  6. IN XCODE, in the PROVISIONING PROFILES window (previous image), click REFRESH (bottom right)

alternatively, you could disable (sorta like delete) the device from your provisioning profiles (in developer.apple.com) and then starting all over, like with a "new" device. but apple is real picky about developer behavior, i wouldnt go around deleting and recreating devices because they might start doing human interference on your approvals and that will eat up your clock.

clearing your keychain, especially if you find things like com.apple.kerberos.kdc com.apple.systemdefault might be an other solution, espec ially if XCODE IS CRASHING ON ITS OWN (Xcode sometimes crashes because of keychain trash).

last resort, reinstall xcode (you know apple, if it aint working and deleting preferences doesnt solve it, reinstall it).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文