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 错误并且 pedometerData
是 nil
。 (如果你想知道 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 并将其存储在强 属性 中解决了我的问题。
我正在构建一个步骤管理器 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 错误并且 pedometerData
是 nil
。 (如果你想知道 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 并将其存储在强 属性 中解决了我的问题。