Использование Realm в iOS swift 4 - PullRequest
0 голосов
/ 30 августа 2018

Я использую Realm, и это выглядит хорошо. Но я запутался здесь. Потому что я не понял, как работает Realm и какова его структура сохранения данных.

Я в основном разработчик Android, и вы можете сказать, что я новичок в iOS. Поэтому я подумал, что будет основной файл базы данных. а затем внутри него будут разные таблицы, а в таблицах я могу сохранять данные.

Но я очень удивлен, что я сохранил данные, но он не спросил у меня имя таблицы, и я действительно не знаю, как создать таблицу в ней. Как и в Java, мы сначала создаем таблицу, затем отражаем нашу модель в виде строки в этой таблице в базе данных. Я использую следующий файл для сохранения данных в области. Пожалуйста, взгляните и уберите следующие недоразумения

  • скажите, как работает царство?
  • как создается таблица в области?
  • Как проверить, существует ли БД, я имею в виду, если данные уже сохранены?
  • Как проверить, создана ли какая-либо таблица, скажем, (таблица страны), чтобы получить данные ??

и посмотрите следующий класс. Это в основном вспомогательный класс.

   public class DbHelper {

    private init() {}

    static let sharedDbHelper = DbHelper()

    var realmObj = try! Realm()

    /**
     Generic function to create Object in the DB
     */
    func save <T: Object> (_ obj : T){

        do {
            try realmObj.write {
                realmObj.add(obj)
            }

        }catch{
            print("DbHelperException","Create",error)
        }
    }


    /**
     Generic function to update Object in the DB
     */
    func update <T: Object> (_ obj : T, with dictionary: [String : Any?]){
        do{
            try realmObj.write {

                for (key,value) in dictionary{
                    obj.setValue(value, forKey: key)
                }

            }
        }catch {
            print("DbHelperException","Update",error)
        }


    }

    /**
     Generic function to delete Object in the DB
     */
    func delete <T: Object> (_ obj : T){
        do {
            try realmObj.write {
                realmObj.delete(obj)

            }
        }catch {
            print("DbHelperException","Delete",error)
        }

    }

    /**
     Function to manage the error and post it
     */
    func postDbError(_ error : Error)  {

        NotificationCenter.default.post(name: NSNotification.Name(""), object: error)
    }

    /**
     Function to observe the error and post it
     */
    func observeDbErrors(in Vc: UIViewController, completion: @escaping  (Error?) -> Void) {
        NotificationCenter.default.addObserver(forName: NSNotification.Name(""), object: nil, queue: nil) { (notification) in
            completion(notification.object as? Error)
        }
    }


    /**
     Function to remove observer of the error
     */
    func stopDbErrorObserver (in Vc: UIViewController ){

        NotificationCenter.default.removeObserver(Vc, name: Notification.Name(""), object: nil)
    }
}

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Эквивалентом «таблицы» в Realm является модель, которую вы определяете как class. Вы можете прочитать об этом здесь: https://realm.io/docs/swift/latest/#models

Вот пример, который предоставляет Realm:

class Dog: Object {
  @objc dynamic var name = ""
  @objc dynamic var owner: Person? // Properties can be optional
}

Таким образом, в этом случае Dog - это имя вашей таблицы, а name и owner - это имена столбцов (каждое с определенным типом данных).

0 голосов
/ 30 августа 2018

Я думаю, что все ваши вопросы касаются одной и той же проблемы, вы думаете, что база данных областей работает с использованием таблиц, однако это не так, вместо этого база данных областей использует области. Они могут быть локальными (в вашем случае), в памяти или синхронизированными.

Область может содержать несколько видов объектов, которые представляют собой таблицы, о которых вы думаете.

  • Если вы хотите иметь разные таблицы, решением будет определить несколько объектов RealmObject.

  • Чтобы проверить, не содержит ли ваше Царство какой-либо экземпляр определенного объекта, вы можете сделать что-то вроде этого: database.objects(YourRealmObject).isEmpty()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...