【问题标题】:CMPedometer as property, Error code 103CMPedometer 作为属性,错误代码 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。

标签: objective-c core-motion


【解决方案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 编译器也会为属性生成一个实例变量。所以无论哪种方式,它都是一个实例变量。这不是问题。
    猜你喜欢
    • 2015-02-14
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 2022-12-03
    • 1970-01-01
    • 2011-02-09
    • 2022-10-14
    相关资源
    最近更新 更多