CMPedometer 作为 属性,错误代码 103

CMPedometer as property, Error code 103

我正在构建一个步骤管理器 class,并且在我的 .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 错误并且 pedometerDatanil。 (如果你想知道 NSDate 上的 midnight 选择器,它来自我构建的一个类别,据我所知,它有大量的单元测试并且工作正常。) CMPedometer 你的 class 的 属性 应该可以阻止这种情况发生,但尽管我确实这样做了,但我仍然收到错误消息。

我做错了什么?我如何更改我的(非常简单的)代码以获取步骤?

我遇到了同样的问题,但我没有将它设为 属性,而是将其设为实例变量,所以试试这个

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

问题是,尽管有指向我的 CMPedometer 实例的强指针,但我没有指向我的 WDStepTrackerManager 包装器 class 的强指针。实例化此 class 并将其存储在强 属性 中解决了我的问题。