Nano Hash - криптовалюты, майнинг, программирование

Realm.objects(Type) возвращает пустые объекты

Я новичок в разработке Xcode, и мне нужна помощь с базой данных Realm. Это мои таблицы

class Parent: Object {
    var id :Int = 0
    var name: String = ""
}

class Surah: Parent {
    dynamic var ayatNum = 0

    private var fav : Bool {
        set { self.fav = newValue }
        get { return self.fav }
    }

    init(id: Int , ayat: Int , name: String) {
        super.init()
        super.id = id
        self.ayatNum = ayat
        super.name = name
    }

    override static func primaryKey() -> String? {
        return "id"
    }

    required init(realm: RLMRealm, schema: RLMObjectSchema) {
        super.init()
    }

    required init(value: AnyObject, schema: RLMSchema) {
        super.init()
    }

    required init() {
        super.init()
    }
}

class Reader: Parent{
    private var fav: Bool {
        set { self.fav = newValue }
        get { return self.fav }
    }

    init(id: Int , name: String) {
        super.init()
        self.id = id
        self.name = name

    }

    override static func primaryKey() -> String? {
        return "id"
    }

    required init(realm: RLMRealm, schema: RLMObjectSchema) {
        super.init()
    }

    required init(value: AnyObject, schema: RLMSchema) {
        super.init()
    }

    required init() {
        super.init()
    }
}

и когда я вызываю эти строки и сохраняю результаты в массиве и печатаю его

realm = try!Realm()
readers = Array(realm.objects(Reader.self))
print(readers)

и этот тоже пробую

readers = Array(try!Realm().objects(Reader.self))
print(readers)

он печатает пустые объекты

Reader {
    id = 0;
    name = ;
}, Reader {
    id = 0;
    name = ;
}, Reader {
    id = 0;
    name = ;
}

Я ищу эту проблему в stackoverflow и нахожу то решение, которое не решило мою проблему.

Realm.objects() возвращает пустые объекты

Может кто-нибудь помочь мне !!

18.07.2016

Ответы:


1

Поскольку ваши свойства класса Parent не объявлены как dynamic. Большая часть собственности в Realm должна быть объявлена ​​как dynamic (исключение составляют List и LinkingObjects). Realm загружал все значения лениво для повышения производительности. Весь доступ к свойствам заменяется специализированным средством доступа во время выполнения. Поэтому вы должны объявить свойства как dynamic. Как следующее:

class Parent :Object{
    dynamic var id: Int=0
    dynamic var name: String=""
}

См. https://realm.io/docs/swift/latest/#cheatsheet.

Кроме того, класс Surah и класс Reader будут намного проще, используя инициализатор convenience. Если это так, вам не нужно переопределять init(realm: RLMRealm, schema: RLMObjectSchema), init(value: AnyObject, schema: RLMSchema) и init().

class Surah :Parent {
    dynamic var ayatNum = 0

    private var fav : Bool {
        set { self.fav = newValue }
        get { return self.fav }
    }

    convenience init(id: Int , ayat:Int , name:String) {
        self.init()
        self.id = id
        self.ayatNum = ayat
        self.name = name

    }
}

class Reader : Parent {
    private var fav : Bool {
        set { self.fav = newValue }
        get { return self.fav }
    }

    convenience init(id: Int , name:String) {
        self.init()
        self.id = id
        self.name = name
    }

    override static func primaryKey() -> String? {
        return "id"
    }

}
18.07.2016
  • спасибо большое супер 18.07.2016
  • о, ты спас меня. 06.10.2019

  • 2

    Попробуйте это, чтобы добавить объект из области

    let realm = try! Realm()
    override func viewDidLoad() {
        super.viewDidLoad()
    
        // retrieve all objects from realm
        let readers = realm.objects(Reader)
        print(readers)
    }
    
    18.07.2016
  • данные уже находятся в базе данных, я вижу данные в браузере Realm, но когда я пытаюсь получить их и распечатать, они печатают пустые свойства !! 18.07.2016
  • Я обновил свой ответ, я всегда использую этот способ в обязательном порядке 18.07.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..