CMPedometer作为属性,错误代码103

时间:2015-02-12 20:25:50

标签: objective-c core-motion

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

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

2 个答案:

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