From 0a8388d2cb424f740d373c05da4a835a60dfd689 Mon Sep 17 00:00:00 2001 From: Levan Chikvaidze Date: Tue, 24 Sep 2019 12:06:27 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6?= =?UTF-8?q?=D0=BA=D0=B0=20in-memory=20Realm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Для работы с in-memory Realm необходима сильная ссылка на его instance. В функцию, возвращающую instance класса Realm, добавлена проверка на наличие у DAO ссылки на instance in-memory Realm. При наличии inMemoryIndentifier в Realm.Configuration, отдается либо уже имеющийся instance, либо создается новый. При отсутствии inMemoryIndentifier в Realm.Configuration, всегда создается default Realm. --- DAO/Classes/RealmDAO/DAO/RealmDAO.swift | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/DAO/Classes/RealmDAO/DAO/RealmDAO.swift b/DAO/Classes/RealmDAO/DAO/RealmDAO.swift index 155b074..c62f83c 100644 --- a/DAO/Classes/RealmDAO/DAO/RealmDAO.swift +++ b/DAO/Classes/RealmDAO/DAO/RealmDAO.swift @@ -19,7 +19,8 @@ open class RealmDAO: DAO { /// Translator for current `RLMEntry` and `RealmModel` types. private let translator: RealmTranslator private let configuration: Realm.Configuration - + /// In-memory Realm instance. + private var inMemoryRealm: Realm? // MARK: - Public @@ -285,7 +286,18 @@ open class RealmDAO: DAO { } private func realm() throws -> Realm { - return try Realm(configuration: configuration) + guard configuration.inMemoryIdentifier != nil else { + return try Realm(configuration: configuration) + } + + if let realm = inMemoryRealm { + return realm + } + + let realm = try Realm(configuration: configuration) + inMemoryRealm = realm + + return realm } }