我允许用户选择一个位置,并希望在另一个屏幕中对其进行测试:
if (myManager.centerOfMap == (id)[NSNull null]) {
self.centerOfMap = myManager.centerOfMap;
}
但是我知道上面的方法不正确,因为它给了我一个指针转换警告。
然后我尝试做:
if (CLLocationCoordinate2DIsValid(*(myManager.centerOfMap))) {
self.centerOfMap = myManager.centerOfMap;
}
但是由于未设置myManager.centerOfMap,所以我的程序由于EXC_BAD_ACCESS而崩溃。如何使它告诉我CLLocationCoordinate2D是否已分配值?
最佳答案
请注意,NSNull
实际上是一个(单个)对象。这个想法是在想要有一个空值对象(即不能只使用nil值或指针)的地方使用它。例如,作为NSDictionary
中的对象。这不是您在这里寻找的东西。
如果将centerOfMap
创建为CLLocationCoordinate2D
,则这只是一个简单的结构,而不是对象。请注意,您将按以下方式创建它:
CLLocationCoordinate2D centerOfMap;
不是这样的:
CLLocationCoordinate2D *centerOfMap;
CLLocationCoordinate2D结构定义如下:
typedef struct {
CLLocationDegrees latitude;
CLLocationDegrees longitude;
} CLLocationCoordinate2D;
因此,如果您想知道给定值是否良好,则需要执行以下操作之一:
1)有一个单独的成员变量,说明是否已添加有效位置。例如,
BOOL retrievedCenterOfMap
。然后在配置centerOfMap时将其设置为YES,这样您的测试将变为:if ([myManager retrievedCenterOfMap]) {
self.centerOfMap = myManager.centerOfMap;
}
2)在
centerOfMap
变量中设置已知的无效值。 CLLocationCoordinate2DIsValid()
会告诉您centerOfMap
值是否有效(是否为有效坐标),但您应将其与实际设置的值区分开!然后,问题就变成了您应该使用哪个无效值,将来任何检查您的代码的人都会知道您在这里做了什么。
关于ios - 如何在iOS中测试空对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11566257/