Категории не отображаются в симуляторе ... Застрял - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь создать приложение со списком дел, которое добавляет категории и элементы внутри каждой категории. Категории сохраняются в базе данных области, но она вообще не загружается. Я пересмотрел свой код как a, но по-прежнему ничего не появляется. Ячейку tableview можно щелкнуть, но ее имена не отображаются на экране. Однако он все еще сохраняется в файле области. Если кто-то знает решение, пожалуйста, помогите мне и вот код. приветствуется любая помощь

import UIKit
import RealmSwift
class CategoryViewController: UITableViewController {
    let realm = try! Realm()
    var categories: Results<Category>!
    override func viewDidLoad() {
        super.viewDidLoad()
        loadCategories()
    }

    @IBAction func addButtonPressed(_ sender: UIBarButtonItem) {
        var textfield = UITextField()
        let alert = UIAlertController(title: "Add new Category", message: "", preferredStyle: .alert)
        let action = UIAlertAction(title: "Add", style: .default) {
            (action) in
            let newCategory = Category()
            newCategory.name = textfield.text!
            self.save(category: newCategory)
        }
        alert.addAction(action)
        alert.addTextField {
            (field) in
            textfield = field
            textfield.placeholder = "Add new Category"
        }
        present(alert, animated: true, completion: nil)
    }

    //MARK: - TableView Delegate Methods
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        performSegue(withIdentifier: "goToItems", sender: self)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let destinationVC = segue.destination as! ToDoListViewController
        if let indexPath = tableView.indexPathForSelectedRow {
            destinationVC.selectedCategory = categories[indexPath.row]
        }
    }

    //MARK: - TableView DataSource Methods
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return categories.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "CategoryCell", for: indexPath)
        let category = categories[indexPath.row]
        cell.textLabel?.text = category.name
        return cell
    }

    //MARK: - Data Manipulation Methods
    func save(category: Category) {
        do {
            try realm.write {
                realm.add(category)
            }
        }
        catch {
            print("Error saving category, \(error)")
        }
        self.tableView.reloadData()
    }

    func loadCategories() {
        categories = realm.objects(Category.self)
        tableView.reloadData()
    }

}

А это классы категорий и предметов: ...

import Foundation
import RealmSwift

class Category: Object {
  dynamic var name: String = ""
  let items = List<Item>()
}

import Foundation
import RealmSwift

class Item: Object {
  dynamic var title: String = ""
  dynamic var done: Bool = false
  var parentCategory = LinkingObjects(fromType: Category.self, property: "items")
}

На изображении ниже представлена ​​ситуация с приложением.

App situation

1 Ответ

0 голосов
/ 26 мая 2020

Проблема в вашем объекте царства. Объект категории определяется следующим образом:

class Category: Object {
  dynamic var name: String = ""
  let items = List<Item>()
}

и должен быть таким:

class Category: Object {
  @objc dynamic var name: String = ""
  let items = List<Item>()
}

добавление @ obj c отмечает переменную как управляемую Realm:

или что-то вроде этого

@objcMembers class Category: Object {
  dynamic var name: String = ""
  let items = List<Item>()
}

где @objcMembers создает все переменные, управляемые Realm.

Вам также необходимо обновить свой объект Item Realm.

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