Objective c CMP计步器作为属性,错误代码103

Objective c CMP计步器作为属性,错误代码103,objective-c,core-motion,Objective C,Core Motion,我正在构建一个step manager类,在我的.m文件中,我添加了CMPedometer作为属性: @interface WDStepTrackerManager () @property (nonatomic, strong) CMPedometer *pedometer; @end 然后,我在init方法中实例化它(我也尝试过惰性实例化——没有效果): 最后,我试着像这样使用计步器: - (void)stepsForTodayWithCompletion:(void(^)(int ste

我正在构建一个step manager类,在我的.m文件中,我添加了CMPedometer作为属性:

@interface WDStepTrackerManager ()
@property (nonatomic, strong) CMPedometer *pedometer;
@end
然后,我在init方法中实例化它(我也尝试过惰性实例化——没有效果):

最后,我试着像这样使用计步器:

- (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
作为类的属性应该可以阻止这种情况发生,但我仍然收到了错误,尽管我确实这样做了


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

我也有同样的问题,但我没有将其作为属性,而是将其作为实例变量,因此请尝试此方法

@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
包装类的强指针。实例化该类并将其存储在强属性中解决了我的问题。

您使用的是什么设备?@SkylerLauren,iPhone 6.-1编译器也为属性生成一个实例变量。所以不管怎样,它都是一个实例变量。这不是问题所在。
- (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]);
            }
        });
}];
}