ios - 如何在iOS中测试空对象?

标签 ios cocoa-touch

我允许用户选择一个位置,并希望在另一个屏幕中对其进行测试:

 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/

相关文章:

ios - 在drawRect中的if语句问题

ios - 如何在不使用 UIWebView 的情况下获取网站的标题和描述?

ios - UITableviewCell - 在编辑模式下单击空复选标记圆圈不会选择单元格

ios - 如何找到包含给定字符的字体?

objective-c - UITableView setContentOffset但不滚动tableView吗?

ios - 为什么不用指针变量

cocoa - 检查空的核心数据关系 (SQLite)

ios - 我怎样才能使 int 等于 int64_t 而没有得到转换丢失整数精度警告?

ios - 在 iOS 上使用 Google OAuth 注销

ios - 获取有关当前模拟器设备的信息