Я пытаюсь переместить мой процесс в фоновый поток, но я считаю, что управляемый объектОбъект не передается правильно. Инициализировать его в фоновом режиме очереди менеджера местоположения, а так:Контекст управляемого объекта не передается корректно, массив всегда равен нулю
managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
self.managedObjectContext.parentContext = moc;
locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]){
[self.locationManager requestAlwaysAuthorization];
}
geoCoder = [[CLGeocoder alloc] init];
NSNumber *nsInterval = [[NSUserDefaults standardUserDefaults] objectForKey:@"location_interval"];
interval = (nsInterval == nil) ? -1 : [nsInterval intValue];
bgBackupHandler = [[BackgroundBackupHandler alloc]init];
bgBackupHandler.managedObjectContext = self.managedObjectContext;
Я затем вызвать его в другом методе в месте класса обработчика, как так:
[bgBackupHandler OnSyncComplete:[NSNumber numberWithInt:0] message:@"BG-Backup Called"];
Тогда в классе все работает bgBackupHandler пока я не попытаюсь извлечь. Массив всегда равен нулю. Я думаю, что я не передал свой managedObjectContext правильно. Ive пытался использовать self.managedObjectContext, но код либо сбой, либо массив по-прежнему равен нулю. В чем разница между self.managedObjectContext и просто managedObjectContext. Я также читал некоторые, где строго запрещено передавать управляемый объект из одного MOC в другой.
Работа выполнена в фоновом режиме.
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"bdir_0001" inManagedObjectContext:managedObjectContext];
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:entityDescription];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", strDirName];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *array = [managedObjectContext executeFetchRequest:request error:&error];
Ваш класс 'BackgroundBackupHandler' имеет свойство' managedObjectContext', и все же, когда вы делаете запрос, вы используете 'managedObjectContext' самостоятельно, не ссылаясь на свойство. Где эта переменная определена? – Avi
Выполняется ли выборка в фоновом режиме, заключенном в 'executeBlock:'? – quellish
@avi переменная является свойством в интерфейсе и синтезируется в разделе реализации. – 3rdeye7