2011-11-24 62 views
2

在运行ios 5的设备上,我的应用程序效果很好,但在运行ios 4.2.1的设备上出现此故障。 奇怪的是,只有在未连接到xcode时,设备才会崩溃。 当从Xcode中运行它的工作,但是当我没有Xcode的应用程序工作,直到时刻运行它调用的方法:仅当设备未连接到xcode时,iPhone崩溃,如何理解崩溃日志?

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

回答

2

你肯定self是生活所有的时间你使用它,你设置self.locationManager.delegate = nil;之前,你销毁self

+0

自己是一个viewController,直到应用程序完成。但是你足够接近我发现问题不在startLocationUpdates中,而是在stopLocationUpdates中: - (void)stopLocationUpdates {self.locationManager stopUpdatingLocation]; self.locationManager.delegate = nil; self.locationManager = nil; < - 这是导致崩溃的原因! } – Eyal

+0

很高兴这暂停;)我有同样的问题与加速度计:你杀死对象,谁从硬件recives数据,但硬件试图继续发送它的数据。这是崩溃的原因。 – SentineL

0

如果您的设备已包含在供应配置文件中后,您的设备将得到服务,则可能会发生这种情况(至少在xcode 4.2上)。

首先,检查您的手机的“名称”是否与配置文件中的“名称”匹配(最后一次更新为xcode时)。

  1. 开放的Xcode
  2. 点击主办方 open ORGANIZER in XCODE
  3. 选择设备 choose DEVICES
  4. 下图书馆,单击PROVISINING PROFILES
  5. 阅读iOS的TEAM供应配置文件的标题(你应该有一个列表的设备“名称”)
  6. 您最后一次连接的设备应列在设备下(即使它未连接到设备Ë时刻) steps 4 thru 6

检查,看看您的设备上市(在你的provisioning profile)使用相同的“名”是Xcode中就可以读取

我解决我的问题,通过

  1. 去网上@ developer.apple.com,
  2. 登录到会员区,
  3. 选择iOS开发者,
  4. 然后在右侧菜单中选择CERTIFICATES等,然后
  5. 从我的配置文件中编辑设备。 choosing device profile for editing
  6. 在Xcode中,在预置描述文件窗口(以前的图像),点击刷新(右下)

或者,你可以从你的配置配置文件禁用(有点儿像删除)设备(在开发商。 apple.com),然后从头开始,就像使用“新”设备一样。但苹果对开发者的行为真的很挑剔,我不会去删除和重新创建设备,因为他们可能会开始在您的批准过程中干扰人的行为,并且会让您的时钟吃光。

清除您的钥匙链,特别是如果你找到的东西像com.apple.kerberos.kdc com.apple.systemdefault可能是一个其他的解决办法,爱斯佩克ially如果Xcode是拍击自己的(Xcode中有时会崩溃,因为钥匙扣垃圾)。

最后的手段,重新安装Xcode(你知道苹果,如果它不工作,并删除首选项不解决它,重新安装它)。