Projektuję aplikację z CMPedometer i mam jeden dziwny problem. Mam logi z moim klientem i patrzę to CMPedometerData, że myślę, że naprawdę błędne i nie mogę zrozumieć, dlaczego tak jestNiepoprawna data końcowa w CMPedometerData
[11.04.2017 20:16:34 +0000] CMPedometerData, startDate 2017- 04-11 20:16:32 +0000 endDate 2017-04-11 20:18:41 +0000 steps 3 distance 2.130000000004657 floorsOcended (null) floorsDescended (null) currentPace (null) currentCadence (null) averageActivePace 0>
Jak widać mojego klienta (nie mogę odtworzyć tego błędu) otrzymałem krokomierz z metody startPedometerUpdatesFromDate
, a koniecData 2017-04-11 20:18:41 jest większy niż teraz 2017-04-11 20:16:34 (był pierwszy CMPedometerData po startPedometerUpdatesFromDate było lau nched po powrocie z tła - metoda willEnterForeground
). Może ktoś już napotkał podobny problem?
Część mojego kodu:
- (void)didEnterBackground {
dispatch_async(dispatch_get_main_queue(), ^{
[[Pedometer sharedInstance].motionActivityManager stopActivityUpdates];
[[Pedometer sharedInstance].pedometer stopPedometerUpdates];
});
}
- (void)willEnterForeground {
NSDate *nowDate = [NSDate new];
/* here is request to get historical data from lastDateUpdate (store in database) to now date */
[[Pedometer sharedInstance] importDataFrom:lastDateUpdate endDate:nowDate completion:^{
dispatch_async(dispatch_get_main_queue(), ^{
/* show info */
});
}];
dispatch_async(dispatch_get_main_queue(), ^{
[self startUpdatingData:nowDate];
});
lastDateUpdate = nowDate;
}
- (void)startUpdatingData:(NSDate *)fromDate {
NSOperationQueue *activityQueue = [[NSOperationQueue alloc] init];
[[Pedometer sharedInstance].motionActivityManager startActivityUpdatesToQueue:activityQueue withHandler:^(CMMotionActivity * _Nullable act) {
...
}];
[[Pedometer sharedInstance].pedometer startPedometerUpdatesFromDate:fromDate withHandler:^(CMPedometerData * _Nullable pedometerData1, NSError * _Nullable error) {
...
NSLog(@"%@", pedometerData1);
...
lastDateUpdate = pedometerData1.endDate;
...
}];
}
Zrozumiałem, że to dlatego, że od chwili telefonu. Jeśli użyjemy automatycznego czasu na iPhonie, wszystko będzie w porządku, ale jeśli ustawimy datę na telefonie, to nie będzie ono poprawne. – Nikita
Jaka jest twoja definicja Pedometru? Pokaż nam kod – brianLikeApple