Я пытаюсь разработать приложение для watchOS, которое собирает данные датчика (ускорителя) с очень высокой частотой (100 Гц).Я использую Core Data для хранения данных и их экспорта в файл CSV, а затем отправляю их на iPhone.
Приложение вылетело через короткое время, потому что память некоторых потоков превысила ограничение.И я также обнаружил, что метод "executeBackgroundTask" создает слишком много потоков, и загрузка ЦП превышает 100%.
Другая проблема заключается в том, что когда я получаю данные, я получаю большеэлементы данных, которые фактически хранятся в базе данных Sqlite, что весьма запутанно.
Ниже приведен код и метод, вызываемый в блоке обратного вызова этого метода ([self.motionManager startDeviceMotionUpdatesToQueue:self.queue withHandler:^(CMDeviceMotion * _Nullable motion, NSError * _Nullable error) {}]
):
- (void)workoutManager:(nonnull id)manager didReceiveAccelerationData:(nonnull YLAcceleration *)acceleration {
NSString *dateTime = [self.dateFormatter stringFromDate:[NSDate date]];
[self.coreDataStack.persistentContainer performBackgroundTask:^(NSManagedObjectContext * _Nonnull context) {
Acceleration *accData = [[Acceleration alloc] initWithContext:context];
accData.x = acceleration.xString;
accData.y = acceleration.yString;
accData.z = acceleration.zString;
accData.heartRate = self.heartRate;
accData.dateTime = dateTime;
accData.session = self.currentSession;
NSError *saveError = nil;
[context save:&saveError];
if (error) {
NSLog(@"Save data failed:%@", error);
}else{
NSLog(@"Save data succeeded:%@", [NSThread currentThread]);
}
}];
}
Заранее спасибо.