2014-08-28 100 views
0

我正在開發一個應用程序,我需要驗證給定時間內給定變量是否具有相同的值。我該怎麼做?也許一個解決方案可以是使用一個線程,並手動強制這個來測試我的變量每100毫秒(等價於C函數「等」或類似的東西)。這是對的嗎?我認爲(並希望)有一個更優雅的解決方案。循環測試一個變量

具體而言,我正在使用信標,當信標立即通過我的設備一段時間後,我需要觸發一種方法。

回答

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]; 
       } 

      } 

     } 
    } 

我意識到這不是你正在問的問題,而是想提供一個替代方案,以防它在你的用例中更好地工作。

+0

好又容易的選擇。謝謝你,謝謝你 – dylaniato 2014-08-28 17:38:24

0

您可以使用鍵值觀測。參見:AppleNSHipster

當值發生變化時,您將收到通知。

0

您可以使用NSTimer來安排此測試。

或者使用

- (void)observeValueForKeyPath:(NSString *)keyPath 
        ofObject:(id)object 
        change:(NSDictionary *)change 
        context:(void *)context