我有一个问题。
我有一个ViewController,其中我有一个属性,它是NSManagedObject的子类。在同一个viewController中,在viewDidAppear方法中,我在CLLocationManager对象上调用新的requestAlwaysAuthorization方法,因为我需要使用GPS。我的问题是,在用户允许我使用设备位置之后,核心数据对象(NSManagedObject)具有所有nil字段。
我已经测试过删除我的[_locationManager requestAlwaysAuthorization];行,这会导致NSManagedObject没有损坏但是如果我跳过这一行,我又不能在iOS8 +上使用位置!
我正在使用Magical Records库来处理核心数据,但我看不出这可能是一个因素。
有人知道可能会发生什么吗?
编辑:代码
在我的viewController(VC)的.h文件中,我有
@property (strong, nonatomic) CDMission *mission;
并且在同一个VC的.m文件中我有:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[[LocationTracker sharedTracker] wakeUpLocationManager];
}
LocationTracker类中的重要方法如下所示:
+ (instancetype)sharedTracker {
static LocationTracker *sharedTracker = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedTracker = [[self alloc] init];
});
return sharedTracker;
}
# pragma mark - Getters and setters
- (CLLocationManager *)locationManager {
if (!_locationManager) {
_locationManager = [[CLLocationManager alloc] init];
if ([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[_locationManager requestAlwaysAuthorization];
}
_locationManager.activityType = CLActivityTypeFitness;
_locationManager.pausesLocationUpdatesAutomatically = YES;
_locationManager.delegate = self;
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
}
return _locationManager;
}
- (void)wakeUpLocationManager {
[self locationManager];
}
当我在viewDidAppear中放置一个断点时,我可以看到我的CDMission对象(这是我的NSManagedObject)是如何正常但是当我在允许位置后按下按钮并在按钮的选择器中放置一个断点时,我看到我的对象是如何搞砸了
第二次编辑: 作为VC中属性的CDMission对象从另一个viewcontroller传递到VC。因此,没有与我的问题相关的核心数据代码。只是在用户回答了该位置的权限问题后,NSManagedObject CDMission就会被破坏。