У меня есть функция sync
, которая периодически запускается, чтобы синхронизировать все несинхронизированные модели Realm (я использую этот флаг sync
внутри моего приложения, просто чтобы проверить, обработал ли я уже эту модель).Realm.io: Синхронизация или Async?
Я использовал NSLock в качестве защиты, потому что может случиться так, что sync
работают несколько раз одновременно.
У меня возникла проблема в том, что иногда одни и те же модели обрабатываются несколько раз. Я хотел бы знать, есть ли проблема в моем коде, и как я могу ее исправить (я думаю, это может быть связано с тем, что realm.io может быть асинхронным).
@property (strong, nonatomic) NSLock *lock;
- (void)sync
{
if (![self.lock tryLock]) return;
RLMResults *models = [Model objectsWhere:@"sync = 0"];
for (Model *model in models) {
[realm beginWriteTransaction];
model.sync = 1; // 1 step - Required to run the function.
[realm commitWriteTransaction];
[self myFunc]; // 2 step.
[self.lock unlock];
}
- (void)myFunc
{
NSLog(@"Updating view controller."):
}
Небольшая вещь: '[realm.inWriteTransaction]' должно быть '[realm inWriteTransaction]'. –
Спасибо, исправил. – marius