CLLocation 不为零,但尝试将其打印出来会抛出 EXC_BAD_ACCESS

Posted

技术标签:

【中文标题】CLLocation 不为零,但尝试将其打印出来会抛出 EXC_BAD_ACCESS【英文标题】:CLLocation is not nil but trying to print it out throws EXC_BAD_ACCESS 【发布时间】:2010-05-06 06:17:03 【问题描述】:

抱歉,这可能是一个菜鸟问题,但我正在使用 CoreLocation,这被难住了。

我正在使用此站点上推荐的单例查找 currentLocation,当我获得 currentLocation 对象时,它返回 true 以进行非零检查。但是,当我尝试打印它的描述时,它会抛出 EXC_BAD_ACCESS。

//WORKS Current location 8.6602e-290
NSLog(@"Current location %g",currLoc);

//DOESN'T WORK
NSLog(@"Current location %@",[currLoc description]);

//DOESN'T WORK - Is this causing the description to fail as well?
NSLog(@"Current location %g",currLoc.coordinate.latitude);

为什么我可以在第一个上看到某些东西,而在其他上看不到?顺便说一句,这是在 3.1.2 模拟器上运行的谢谢。

【问题讨论】:

你解决过这个问题吗?每当我访问属性纬度或经度时,我也看到了这一点...... 【参考方案1】:

currLoc.coordinate.latitude 是双精度类型...如果 %g 不起作用,您可以使用 %f

NSLog(@"Current location %f",currLoc.coordinate.latitude);

【讨论】:

这也会引发 EXC_BAD_ACCESS。【参考方案2】:

currLoc 可能会返回 TRUE 以表示 不是 Nil 检查。但是可能存在释放对象(悬空指针)的机会,这将通过 nil 检查条件。这可能是你的问题。

不要直接使用 currLoc 成员,而是使用 Accessor for currLoc。这将解决您的问题:)

【讨论】:

抱歉,我可能不太清楚。 currLoc 实际上是我在此控制器中设置的局部变量,但它设置为 locationController.currentLocation。 LocationController 是实现 CLLocationManagerDelegate 的接口。【参考方案3】:
// malformed: %g format specifier expects type
// double, you're passing an objc object.
// sending arguments through (...) with the
// invalid types/widths is a near certain way
// to crash an app, and the data will be useless
// to the function called (NSLog in this case)
NSLog(@"Current location %g",currLoc);

// try running the app with zombies enabled.
// in short, enabling zombies (NSZombiesEnabled)
// is a debugging facility to determine whether
// you use an objc object which would have been freed.
NSLog(@"Current location %@",[currLoc description]);

// as long as currLoc is a pointer to a valid (non-freed)
// objc object, then this should be fine. if it is not valid
NSLog(@"Current location %g",currLoc.coordinate.latitude);

【讨论】:

我想我的问题是在什么情况下 currLog 可以通过 nil 检查并在尝试访问 currLoc.coordinate.latitude 时仍然抛出错误。我正在检查 currLoc 以确保它被 LocationManager 设置为某个值,并且我能够通过添加一些 BOOL var 来解决该问题,其唯一目的是跟踪该变量的设置。感谢您的输入。附言。我通常在进行任何测试时启用 NSZombie,但在尝试调试时我没有看到任何有用的信息。 T

以上是关于CLLocation 不为零,但尝试将其打印出来会抛出 EXC_BAD_ACCESS的主要内容,如果未能解决你的问题,请参考以下文章

如果 Swift 中存在 NSUserDefault,则尝试更新 CLLocation

堆叠条形图的 Y 比例域最小值/最小值不为零; X 轴溢出

我如何能够确保 json 元素不为零?

2021-05-16:时间复杂度必须是logN,如何求阶乘从右向左第一个不为零的数?

CLLocationCoordinate2D 纬度和经度始终为零

主机部分不为零的子网