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.
3 Réponses :
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 {}
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)
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.
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".
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