У класса нет инициализаторов Ошибка Realm Class Swift - PullRequest
0 голосов
/ 19 февраля 2019

Я получаю Класс не имеет инициализаторов Ошибка.Разве это не то, как я бы настроил класс?Это для базы данных объектов OBM, свойств, которые я хочу сохранить.Я новичок в стремительности и реальности, но я решил, что так и будет.Если я возьму функцию init () и просто назначу все значения, она работает, однако свойства, такие как justTook и все, что я не хочу, начинаются со значения, мне нужно установить его позже в программе.

Вот мой код:

class MedInfo: Object {
    //  Info To Be Stored
    @objc dynamic var keyID = UUID().uuidString
    @objc dynamic var medName: String
    @objc dynamic var medDose: String
    @objc dynamic var currentDate: Date
    @objc dynamic var timeTook: Date
    @objc dynamic var lastTook: Date
    @objc dynamic var durationOfTime: Date
    @objc dynamic var doctorName: String
    @objc dynamic var rxDate: Date
    @objc dynamic var medInfo: String
    @objc dynamic var pictureOfMed: UIImage

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

    convenience init(medName: String, medDose: String, currentDate: Date, timeTook: Date, lastTook: Date, durationOfTime: Date, doctorName: String,rxDate: Date, medInfo: String, pictureOfMed: UIImage) {
        self.medName = medName
        self.medDose = medDose
        self.currentDate = currentDate
        self.timeTook = timeTook
        self.lastTook = lastTook
        self.durationOfTime = durationOfTime
        self.doctorName = doctorName
        self.rxDate = rxDate
        self.medInfo = medInfo
        self.pictureOfMed = pictureOfMed
    }

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

Вам необходимо установить значения по умолчанию для всех параметров, как смутно описано в документации.Начиная с здесь :

При использовании Realm из Swift функция Swift.reflect (_ :) используется для определения информации о ваших моделях, что требует успешного вызова init ()., Это означает, что все не необязательные свойства должны иметь значение по умолчанию.

Все примеры показывают это, поэтому следуйте им.Ваш класс должен быть объявлен:

class MedInfo: Object {
    //  Info To Be Stored
    @objc dynamic var keyID = UUID().uuidString
    @objc dynamic var medName: String = ""
    @objc dynamic var medDose: String = ""
    @objc dynamic var currentDate: Date = Date()
    @objc dynamic var timeTook: Date = Date()
    @objc dynamic var lastTook: Date = Date()
    @objc dynamic var durationOfTime: Date = Date()
    @objc dynamic var doctorName: String = ""
    @objc dynamic var rxDate: Date = Date()
    @objc dynamic var medInfo: String = ""

    // UIImage not supported, you'll need to store a URL/filename or something else
    @objc dynamic var pictureOfMed: UIImage
0 голосов
/ 19 февраля 2019

Поскольку @ces уже правильно цитируется в документации Realm: " Это означает, что все не необязательные свойства должны иметь значение по умолчанию. "

Именно поэтому я считаю, что лучший способдля вас создать объект Realm - это объявить переменные как необязательные.

Таким образом, вам не нужно будет вызывать init.Это способ, которым я создаю свои собственные объекты Realm, и способ, которым я видел, что большинство людей создают их.

Итак, ваш объект будет выглядеть так:

class MedInfo: Object {
//  Info To Be Stored
@objc dynamic var keyID = UUID().uuidString
@objc dynamic var medName: String?
@objc dynamic var medDose: String?
@objc dynamic var currentDate: Date?
@objc dynamic var timeTook: Date?
@objc dynamic var lastTook: Date?
@objc dynamic var durationOfTime: Date?
@objc dynamic var doctorName: String?
@objc dynamic var rxDate: Date?
@objc dynamic var medInfo: String?
@objc dynamic var pictureOfMed: UIImage?

override static func primaryKey() -> String? {
    return "keyID"
}
0 голосов
/ 19 февраля 2019

Вы должны вызвать init для создания экземпляра.

convenience init(medName: String, medDose: String, currentDate: Date, timeTook: Date, lastTook: Date, durationOfTime: Date, doctorName: String,rxDate: Date, medInfo: String, pictureOfMed: UIImage) {

    self.init() 

    self.medName = medName
    self.medDose = medDose
    self.currentDate = currentDate
    self.timeTook = timeTook
    self.lastTook = lastTook
    self.durationOfTime = durationOfTime
    self.doctorName = doctorName
    self.rxDate = rxDate
    self.medInfo = medInfo
    self.pictureOfMed = pictureOfMed
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...