我正在开发一个应用程序,我需要验证给定变量在给定时间内是否具有相同的值。我该怎么做?也许一个解决方案可以是使用一个线程并手动强制它来测试我的变量每100毫秒(相当于C函数“等待”或类似的东西)。这是对的吗?我认为(并希望)有一个更优雅的解决方案。
具体来说,我正在使用信标,我需要触发一个方法,当信标在我的设备上立即停留一段时间。
答案 0 :(得分:0)
答案 1 :(得分:0)
您可以使用NSTimer
来安排此测试。
或使用
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
答案 2 :(得分:0)
当范围为CLBeacons
时,无论如何都会从操作系统获得回调,因此将逻辑放入此回调方法可能更容易。像这样:
NSMutableDictionary *immediateRangeBeaconTimes;
...
- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)iBeacons inRegion:(CLBeaconRegion *)region {
NSDate *now = [NSDate new];
for (CLBeacon *iBeacon in iBeacons) {
NSString *key = [NSString stringWithFormat:@"%@ %@ %@", iBeacon.proximityUUID, iBeacon.major, iBeacon.minor];
if ([immediateRangeBeaconTimes objectForKey:key] == Nil) {
if (iBeacon.proximity == CLProximityImmediate) {
[immediateRangeBeaconTimes setObject: now forKey:key];
}
}
else {
if (iBeacon.proximity == CLProximityImmediate) {
if ([now timeIntervalSinceDate: [immediateRangeBeaconTimes objectForKey:key]] > 60) {
NSLog(@"This beacon has been immediate for 60 seconds. Do something.");
}
}
else {
[immediateRangeBeaconTimes removeObjectForKey:key];
}
}
}
}
我意识到这并不是你所要求的,但是想要提供一个替代方案,以防它对你的用例更好。