üzerinden erişilen bölge, bölge ile çalışmak için seri GCD sırasını kullanıyorum. Uygulama, GCD sıra için iş parçacıkları arasında geçiş yapmaya başladığında Realm accessed from incorrect thread
istisnasıyla çöküyor. GCD API'yi kullanarak bir thread ile verilen bölgeyi bağlama yolu var mı? İşte Hatalı iş parçacığı
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++;
});
}];
Teşekkürler, işe yaradı. – Maxim
Söylediklerinizden gelen şey, sadece RLMRealm'in iş parçacığı olmadığını düşündüm, tüm RLMObject alt sınıflarının bu alandan aldığının ortaya çıktığı ortaya çıktı. " – onmyway133
" Realm belgelerinden: "yalnızca bir nesneyi oluşturulduğu iş parçacığı ve kalıcı varlıkları için doğrudan kendi ivarlarına erişemezsiniz. " https://realm.io/docs/objc/latest/#models – jpsim