我正在构建一个步骤管理器类,在我的.m文件中,我添加了CMPedometer作为属性:
@interface WDStepTrackerManager ()
@property (nonatomic, strong) CMPedometer *pedometer;
@end
然后我在我的init方法中实例化它(我也试过懒惰的实例化 - 没有效果):
- (instancetype)init
{
self = [super init];
if (self) {
self.pedometer = [[CMPedometer alloc] init];
}
return self;
}
最后,我尝试使用这样的计步器:
- (void)stepsForTodayWithCompletion:(void(^)(int steps))completion
{
[self.pedometer queryPedometerDataFromDate:[[NSDate date] midnight] toDate:[NSDate date] withHandler:^(CMPedometerData *pedometerData, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (pedometerData) {
completion([pedometerData.numberOfSteps intValue]);
}
});
}];
}
然而,每次尽管批准访问数据,我都会收到103错误,pedometerData
为nil
。 (如果你想知道midnight
上的NSDate
选择器,它来自我构建的类别,它有大量的单元测试并且正常工作,据我所知。)其他问题说CMPedometer
你班级的一个属性应该阻止它发生,但我仍然收到错误,尽管这样做。
我做错了什么?如何更改我的(非常简单的)代码以获取步骤?
答案 0 :(得分:1)
问题在于,尽管有一个指向我的CMPedometer
实例的强大指针,但我没有指向我的WDStepTrackerManager
包装器类的强指针。实例化这个类并将其存储在一个强大的属性中解决了我的问题。
答案 1 :(得分:0)
我遇到了同样的问题,但是我没有把它变成一个属性,而是让它成为一个实例变量,所以试试这个
@implementation WDStepTrackerManager
CMPedometer *pedometer;
- (instancetype)init
{
self = [super init];
if (self)
{
pedometer = [[CMPedometer alloc]init];
}
return self;
}
并像这样使用
- (void)stepsForTodayWithCompletion:(void(^)(int steps))completion
{
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *startOfDate =[calendar startOfDayForDate:[NSDate date]];
[pedometer queryPedometerDataFromDate:startOfDate toDate:[NSDate date] withHandler:^(CMPedometerData *pedometerData, NSError *error) {
if (pedometerData) {
completion([pedometerData.numberOfSteps intValue]);
}
});
}];
}