NSPredicate 根据 UUID 过滤 beacon,major 和 minor 引发异常
NSPredicate to filter beacon according to UUID, major and minor raising exception
我有一个包含 CLBeacon 集合的 beacons 数组,我只想获取与 NSPredicate 中给定的 uuid、主要和次要匹配的信标。下面是对象 C 中的代码,它由于谓词中的 UUID 而生成异常。如果我从查询中删除 uuidPredicate,代码工作正常。
- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray<CLBeacon *> *)beacons inRegion:(CLBeaconRegion *)region{
NSPredicate *uuidPredicate = [NSPredicate predicateWithFormat:@"uuid.UUIDString == [c] %@", @"03672ce6-9272-48ea-ba54-0bf679217980"];
//NSPredicate *uuidPredicate = [NSPredicate predicateWithFormat:@"uuid == %@", @"03672ce6-9272-48ea-ba54-0bf679217980"];
NSPredicate *majorPredicate = [NSPredicate predicateWithFormat:@"major = %ld", 1];
NSPredicate *minorPredicate = [NSPredicate predicateWithFormat:@"minor = %ld", 3];
NSPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[uuidPredicate, majorPredicate, minorPredicate]];
NSArray *pointABeacon = [beacons filteredArrayUsingPredicate:compoundPredicate];
}
信标数组类似于
beacons (
"CLBeacon (uuid:03672CE6-9272-48EA-BA54-0BF679217980, major:1, minor:1, proximity:1 +/- 0.07m, rssi:-61)",
"CLBeacon (uuid:03672CE6-9272-48EA-BA54-0BF679217980, major:1, minor:2, proximity:1 +/- 0.07m, rssi:-62)",
"CLBeacon (uuid:03672CE6-9272-48EA-BA54-0BF679217981, major:1, minor:3, proximity:2 +/- 1.64m, rssi:-53)"
)
例外是
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[< CLBeacon 0x1c401c410 > valueForUndefinedKey:]: this class is
not key value coding-compliant for the key uuid.'
如何过滤uuid,major,minor三个参数的数组?
错误很明显:
CLBeacon
对象没有名为 uuid
.
的 属性
当您打印 CLBeacon
对象时,您可能会看到 "uuid",但这不是 属性 的真实名称,而是 proximityUUID
所以:
NSPredicate *uuidPredicate = [NSPredicate predicateWithFormat:@"uuid.UUIDString == [c] %@", @"03672ce6-9272-48ea-ba54-0bf679217980"];
应该是:
NSPredicate *uuidPredicate = [NSPredicate predicateWithFormat:@"proximityUUID.UUIDString == [c] %@", @"03672ce6-9272-48ea-ba54-0bf679217980"];
我有一个包含 CLBeacon 集合的 beacons 数组,我只想获取与 NSPredicate 中给定的 uuid、主要和次要匹配的信标。下面是对象 C 中的代码,它由于谓词中的 UUID 而生成异常。如果我从查询中删除 uuidPredicate,代码工作正常。
- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray<CLBeacon *> *)beacons inRegion:(CLBeaconRegion *)region{
NSPredicate *uuidPredicate = [NSPredicate predicateWithFormat:@"uuid.UUIDString == [c] %@", @"03672ce6-9272-48ea-ba54-0bf679217980"];
//NSPredicate *uuidPredicate = [NSPredicate predicateWithFormat:@"uuid == %@", @"03672ce6-9272-48ea-ba54-0bf679217980"];
NSPredicate *majorPredicate = [NSPredicate predicateWithFormat:@"major = %ld", 1];
NSPredicate *minorPredicate = [NSPredicate predicateWithFormat:@"minor = %ld", 3];
NSPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[uuidPredicate, majorPredicate, minorPredicate]];
NSArray *pointABeacon = [beacons filteredArrayUsingPredicate:compoundPredicate];
}
信标数组类似于
beacons (
"CLBeacon (uuid:03672CE6-9272-48EA-BA54-0BF679217980, major:1, minor:1, proximity:1 +/- 0.07m, rssi:-61)",
"CLBeacon (uuid:03672CE6-9272-48EA-BA54-0BF679217980, major:1, minor:2, proximity:1 +/- 0.07m, rssi:-62)",
"CLBeacon (uuid:03672CE6-9272-48EA-BA54-0BF679217981, major:1, minor:3, proximity:2 +/- 1.64m, rssi:-53)"
)
例外是
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[< CLBeacon 0x1c401c410 > valueForUndefinedKey:]: this class is not key value coding-compliant for the key uuid.'
如何过滤uuid,major,minor三个参数的数组?
错误很明显:
CLBeacon
对象没有名为 uuid
.
当您打印 CLBeacon
对象时,您可能会看到 "uuid",但这不是 属性 的真实名称,而是 proximityUUID
所以:
NSPredicate *uuidPredicate = [NSPredicate predicateWithFormat:@"uuid.UUIDString == [c] %@", @"03672ce6-9272-48ea-ba54-0bf679217980"];
应该是:
NSPredicate *uuidPredicate = [NSPredicate predicateWithFormat:@"proximityUUID.UUIDString == [c] %@", @"03672ce6-9272-48ea-ba54-0bf679217980"];