2
votes

Le royaume génère une erreur lors de la tentative d'ajout et d'enregistrement d'un objet

Je développe une application iOS avec la bibliothèque Realm et cela fonctionne très bien.
Mais quand j'ai essayé de sauvegarder un modèle, cela génère une erreur comme celle-ci.

Arrêt de l'application en raison d'une exception non interceptée 'RLMException', raison: 'Index de la ligne de la table cible hors limites

Voici le code.

    Patient {
    id = 1;
    firstName = Gg;
    lastName = ;
    email = ;
    phone = ;
    address1 = ;
    address2 = ;
    city = ;
    state = ;
    dateOfBirth = 2019-04-03 21:24:28 +0000;
    medicalRedcordNumber = ;
    imageUrl = avatar_1;
    patientImages = List<PatientImage> <0x2834a5200> (
        [0] PatientImage {
            id = 1;
            hasPhoto = 1;
            isPostOp = 0;
            path = 4489901936;
            date = 2019-04-08 16:21:54 +0000;
            flap = (null);
            ohPlastyFlap = (null);
            curvelinearFlap = (null);
            rhomboidAFlap = (null);
            rhomboidBFlap = (null);
            noteFlap = (null);
            vyPlastyFlap = (null);
            bilobedFlap = (null);
            circularZFlap = (null);
            atPlastyFlap = (null);
            ouPlastyAFlap = (null);
            ouPlastyBFlap = (null);
            simpleEllipseFlap = (null);
        }
}

Voici l'objet newPatientImage.

PatientImage {
    id = 22;
    hasPhoto = 0;
    isPostOp = 0;
    path = 4426699712;
    date = 2019-04-26 11:32:15 +0000;
    flap = RhomboidAFlap {
        id = 1;
        name = Rhomboid A;
        adjustables = List<Adjustable> <0x280b5c120> (
            [0] Adjustable {
                value = 60;
                defaultValue = 60;
                name = A;
                isDegrees = 1;
            },
            [1] Adjustable {
                value = 60;
                defaultValue = 60;
                name = B;
                isDegrees = 1;
            },
            [2] Adjustable {
                value = 200;
                defaultValue = 200;
                name = C;
                isDegrees = 0;
            },
            [3] Adjustable {
                value = 200;
                defaultValue = 200;
                name = E;
                isDegrees = 0;
            }
        );
        a = 0.6491648060943035;
        b = 0;
        c = 0;
        d = 0.6491648060943035;
        tx = -195.6666717529297;
        ty = -144.5;
        xOffset = -44.99840983089462;
        yOffset = 30.7939660691552;
        width = 650;
        height = 1000;
        centerX = 429.5;
        centerY = 499.9999999999999;
        calibrationSettings = CalibrationSettings {
            measurementUnitRaw = px;
            conversionRatio = 1;
            measuredLength = 0;
            startX = 0;
            startY = 0;
            endX = 0;
            endY = 0;
        };
        flapLocationRaw = ;
    };
    ohPlastyFlap = (null);
    curvelinearFlap = (null);
    rhomboidAFlap = RhomboidAFlap {
        id = 1;
        name = Rhomboid A;
        adjustables = List<Adjustable> <0x280b5c120> (
            [0] Adjustable {
                value = 60;
                defaultValue = 60;
                name = A;
                isDegrees = 1;
            },
            [1] Adjustable {
                value = 60;
                defaultValue = 60;
                name = B;
                isDegrees = 1;
            },
            [2] Adjustable {
                value = 200;
                defaultValue = 200;
                name = C;
                isDegrees = 0;
            },
            [3] Adjustable {
                value = 200;
                defaultValue = 200;
                name = E;
                isDegrees = 0;
            }
        );
        a = 0.6491648060943035;
        b = 0;
        c = 0;
        d = 0.6491648060943035;
        tx = -195.6666717529297;
        ty = -144.5;
        xOffset = -44.99840983089462;
        yOffset = 30.7939660691552;
        width = 650;
        height = 1000;
        centerX = 429.5;
        centerY = 499.9999999999999;
        calibrationSettings = CalibrationSettings {
            measurementUnitRaw = px;
            conversionRatio = 1;
            measuredLength = 0;
            startX = 0;
            startY = 0;
            endX = 0;
            endY = 0;
        };
        flapLocationRaw = ;
    };
    rhomboidBFlap = (null);
    noteFlap = (null);
    vyPlastyFlap = (null);
    bilobedFlap = (null);
    circularZFlap = (null);
    atPlastyFlap = (null);
    ouPlastyAFlap = (null);
    ouPlastyBFlap = (null);
    simpleEllipseFlap = (null);
}

Et voici l'objet patient.

....
do {
    try realm?.write {
        let newPatientImage = PatientImage()
        newPatientImage.path = imageName
        if let flap = flap {
            newPatientImage.setStronglyTypedFlap(flap)
        }
        newPatientImage.hasPhoto = hasPhoto
        newPatientImage.flap?.flapLocationRaw = flapLocation.rawValue
        newPatientImage.id = newPatientImage.incrementalID()
            patient.patientImages.append(newPatientImage)
            realm?.add(newPatientImage)
            realm?.add(patient, update: true)
    }
} catch {

}
...

Quelqu'un pourrait-il m'aider à résoudre ce problème? Ce problème ne se produit pas avant la mise à jour de la version iOS et de la version Realm.

Merci.


10 commentaires

veuillez consulter github.com/realm/realm-cocoa/issues/5008


@BhaveshNayi Bonjour, j'ai vérifié ce problème de github mais il n'a pas de solution.


Je pense que votre objet drapeau "Longueur mesurée" est vide, c'est pourquoi l'application plante.


J'ai compris ce que vous voulez dire, laissez-moi changer mon code et réessayer.


D'accord et faites-moi savoir en cas de problème.


J'ai changé cela mais la même erreur se produit ...


Veuillez ajouter votre code mis à jour. (Je viens d'ajouter vos modifications)


Laissez-nous continuer cette discussion dans le chat .


github.com/realm/realm-cocoa/issues/5340


J'ai vérifié ce problème github mais je ne peux pas obtenir de réponse


3 Réponses :


2
votes

Vous devez manipuler le royaume dans une transaction d'écriture comme celle-ci:

do {
    try self.realm.write
        {
        self.realm.add(entity, update: update)
         }
    }
catch {}


3 commentaires

Bonjour, désolé mais qu'est-ce que self.base et où dois-je ajouter ce code?


Dans l'entité, ajoutez votre objet @ZhengGeChe


mais mon code a même planté à la ligne patient.patientImages.append (newPatientImage)



1
votes

C'était parce que toutes les classes Flap (comme ohPlastyFlap, curvelinearFlap ...) remplacent la classe Flap et que Realm ne reconnaît pas le type Flap.

Je l'ai corrigé en définissant correctement le type de volet.


0 commentaires

1
votes

L'objet "patient" ne dispose pas de l'initialisation correspondante, qui est toujours nulle.

Avant

patient.patientImages.append(newPatientImage)

essayez de créer pour "patient".


0 commentaires