RealmSwift: как добавить несколько объектов в отношение «многие к одному»? - PullRequest
0 голосов
/ 29 января 2019

Моя цель - развить эти отношения с помощью realm swift: relationship between two data sets in realm for swift

У меня есть набор данных со всеми символами .Затем у меня есть несколько списков , к которым я хочу добавить определенные символы.

Вот что я получил в коде swift:

//
//  Lists.swift
//
//  Created by Guest on 28.01.19.
//  Copyright © 2019 Dom. All rights reserved.
//
// https://academy.realm.io/posts/realm-primary-keys-tutorial/

import Foundation
import RealmSwift

class Lists: Object {
    // making use of primary keys
    @objc dynamic var listID = UUID().uuidString
    @objc dynamic var listName : String = ""
    @objc dynamic var listDesc : String = ""
    @objc dynamic var listProgressPercentage : Int = 0
    // lists all characters associated with this list
    var charIDs = List<Characters>()

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

И:

//
//  Characters.swift
//
//  Created by Guest on 28.01.19.
//  Copyright © 2019 Dom. All rights reserved.
//

import Foundation
import RealmSwift

class Characters: Object {
    // get charID from dictionary.txt later
    @objc dynamic var charID        = 0
    @objc dynamic var character     : String = ""

}

Мой вопрос: - Списки все еще пусты.Как теперь добавить новый список и , например добавить 25 различных ссылок на объекты на объекты в «Персонажах»?

Цените вашу помощь!

1 Ответ

0 голосов
/ 29 января 2019

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

    let l0 = Lists()
    l0.listName = "list 0"

    let l1 = Lists()
    l1.listName = "list 1"

    let c0 = Characters()
    c0.character = "char 0 list 0"
    c0.charID = 0

    let c1 = Characters()
    c1.character = "char 1 list 1"
    c1.charID = 1

    l0.charIDs.append(c0)
    l1.charIDs.append(c1)

, а затем записал данные в область

do {
    let realm = try Realm()

    try! realm.write {
        realm.add(l0)
        realm.add(l1) 
    }
} catch let error as NSError {
    print(error.localizedDescription)
}

а затем при проверке области с помощью Realm Studio все символы и списки были написаны правильно, а свойство Charistss Lists связано с символом.

Проблема может быть вызвана не кодом, а именами объектов.Например, объект Lists не является списком.Это один объект, который содержит свойство списков типов с другими свойствами, которые описывают этот конкретный список.Аналогично, объект «Персонажи» - это не группа персонажей, это отдельный персонаж со свойствами, которые описывают этого персонажа.

предположим, что эти объекты предназначены для игры типа приключений, и мы хотим отслеживать, какие персонажи посетилиопределенная область в игре.

Первый объект предназначен для определенной области в игре, которая описывает эту область и содержит свойство списка посещенных персонажей.

class AreaVisitedObject: Object {
   @obj dynamic var: area_name = ""
   @obj dynamic var: area_id = ""
   var charsWhoVisitedList = List<Character>()
   @objc dynamic var char_id = UUID().uuidString

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

а затем объект персонажа, который описывает каждый символ

class CharacterObject: Object {
   @objc dynamic var char_name = ""
   @objc dynamic var char_id = UUID().uuidString

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

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

Надеюсь, это поможет.

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