我正在開發一個應用程序,我需要驗證給定時間內給定變量是否具有相同的值。我該怎麼做?也許一個解決方案可以是使用一個線程,並手動強制這個來測試我的變量每100毫秒(等價於C函數「等」或類似的東西)。這是對的嗎?我認爲(並希望)有一個更優雅的解決方案。循環測試一個變量
具體而言,我正在使用信標,當信標立即通過我的設備一段時間後,我需要觸發一種方法。
我正在開發一個應用程序,我需要驗證給定時間內給定變量是否具有相同的值。我該怎麼做?也許一個解決方案可以是使用一個線程,並手動強制這個來測試我的變量每100毫秒(等價於C函數「等」或類似的東西)。這是對的嗎?我認爲(並希望)有一個更優雅的解決方案。循環測試一個變量
具體而言,我正在使用信標,當信標立即通過我的設備一段時間後,我需要觸發一種方法。
當不等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];
}
}
}
}
我意識到這不是你正在問的問題,而是想提供一個替代方案,以防它在你的用例中更好地工作。
您可以使用NSTimer
來安排此測試。
或者使用
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
好又容易的選擇。謝謝你,謝謝你 – dylaniato 2014-08-28 17:38:24