CMPedometer 作为属性,错误代码 103

Posted

技术标签:

【中文标题】CMPedometer 作为属性,错误代码 103【英文标题】:CMPedometer as property, Error code 103 【发布时间】:2015-02-12 20:25:50 【问题描述】:

我正在构建一个步骤管理器类,并在我的 .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 成为您的班级的财产应该阻止这种情况发生,但是尽管这样做了,我仍然收到错误。

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

【问题讨论】:

你用的是什么设备? @SkylerLauren,一部 iPhone 6。 【参考方案1】:

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

【讨论】:

【参考方案2】:

我也遇到了同样的问题,但是我没有把它变成一个属性,而是把它变成了一个实例变量,所以试试这个

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

【讨论】:

-1 编译器也会为属性生成一个实例变量。所以无论哪种方式,它都是一个实例变量。这不是问题。

以上是关于CMPedometer 作为属性,错误代码 103的主要内容,如果未能解决你的问题,请参考以下文章

iOS CMPedometer的使用

CMPedometer StepCounting 不可用

CMPedometer 保存步骤时间戳

我可以在后台收听 CMPedometer 并在不同情况下发送本地推送通知吗?

如何在 watchkit 应用中启用 CoreMotion?

如何使用php在xpath中使用变量作为属性值?