से एक्सेस किया गया है मैं क्षेत्र के साथ काम करने के लिए सीरियल जीसीडी कतार का उपयोग कर रहा हूं। जब GCD कतार के लिए थ्रेड स्विच करना शुरू करता है तो Realm accessed from incorrect thread
अपवाद के साथ एप्लिकेशन क्रैश हो जाता है। जीसीडी एपीआई का उपयोग कर धागे के साथ दिए गए दायरे को बांधने का कोई तरीका है?दायरे को गलत धागे
यहाँ एक त्वरित उदाहरण
self.realmQueue = dispatch_queue_create("db", DISPATCH_QUEUE_SERIAL);
__block RLMRealm *realm = nil;
dispatch_async(self.realmQueue, ^{
realm = [RLMRealm realmWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:@"temp"]];
});
self.motionManager = [[CMMotionManager alloc] init];
self.motionManager.accelerometerUpdateInterval = 0.001;
__block int i = 0;
__block BOOL shouldBeginWriteTransaction = YES;
[self.motionManager startAccelerometerUpdatesToQueue:[[NSOperationQueue alloc] init] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
dispatch_async(self.realmQueue, ^{
if (shouldBeginWriteTransaction) {
[realm beginWriteTransaction];
shouldBeginWriteTransaction = NO;
}
AccelerationEvent *event = [[AccelerationEvent alloc] init];
event.x = accelerometerData.acceleration.x;
event.y = accelerometerData.acceleration.x;
event.z = accelerometerData.acceleration.y;
event.time = [NSDate date];
[realm addObject:event];
if (i % 1000) {
dispatch_async(dispatch_get_main_queue(), ^{
self.xLabel.text = [NSString stringWithFormat:@"%f", event.x];
self.yLabel.text = [NSString stringWithFormat:@"%f", event.y];
self.zLabel.text = [NSString stringWithFormat:@"%f", event.z];
});
}
if (i % 10000 == 0) {
NSDate *startDate = [NSDate date];
[realm commitWriteTransaction];
NSLog(@"save time: %f", [[NSDate date] timeIntervalSinceDate:startDate]);
shouldBeginWriteTransaction = YES;
}
i++;
});
}];
धन्यवाद, यह काम किया। – Maxim
@ jpsim जो आपने कहा था, मैंने सोचा था कि केवल आरएलएमआरएलएम थ्रेड-सुरक्षित नहीं है, यह पता चला है कि सभी आरएलएम ऑब्जेक्ट उप-वर्ग उस क्षेत्र से मिले हैं, थ्रेड-सुरक्षित नहीं हैं, – onmyway133
रीयल के दस्तावेज़ से: "आप केवल एक ऑब्जेक्ट का उपयोग कर सकते हैं धागा जो इसे बनाया गया था, और आप सीधे अपने किसी भी स्थायी गुणों के लिए अपने इवार्स तक नहीं पहुंच सकते हैं। " https://realm.io/docs/objc/latest/#models – jpsim