【问题标题】:Filter NSSet of MKAnnotations using coordinates and NSPredicate使用坐标和 NSPredicate 过滤 MKAnnotations 的 NSSet
【发布时间】:2014-08-14 17:17:00
【问题描述】:

我有一个NSSetMKAnnotations 获得者:

NSSet *locationSet = [map annotationsInMapRect:map.visibleMapRect];

然后我写一个NSPredicate 来传递所需的纬度和经度,如下所示:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"coordinate.latitude == %f AND coordinate.longitude == %f", coord.latitude, coord.longitude];

现在我尝试通过过滤集合来获取所需的对象:

NSSet *filtered = [locationSet filteredSetUsingPredicate:predicate];
MKAnnotationSubClass *mark = [[filtered allObjects] lastObject];

但是得到一个错误,说我的对象没有我传递的密钥:

由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[valueForUndefinedKey:]:此类不符合键纬度的键值编码。”`

使用纬度和经度参数过滤 NSSet 注释的正确方法是什么?

【问题讨论】:

    标签: ios objective-c cocoa-touch nspredicate mkannotation


    【解决方案1】:

    CLLocationCoordinate2D 不符合键值编码,因此您不能在此对象上使用[NSPredicate predicateWithFormat:] 方法(用于按其属性进行过滤)。

    改用[NSPredicate predicateWithBlock:],你会得到同样的结果。

    【讨论】:

    • 确实,CLLocationCoordinate2D 甚至不是一个对象,而是一个结构体。
    • 是的,但通常重要的是要知道这样的错误发生在任何不符合 KVC 的对象/结构上。
    • 我是说结构不能兼容 KVC;只有对象可以。
    • 正是它!谢谢兄弟!
    猜你喜欢
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 2012-08-09
    相关资源
    最近更新 更多