Точный вариант использования немного неясен, но кажется, что приложение представляет собой конфигурацию Master-> Detail, где главная страница содержит список дат, а затем, когда дата нажата, она переходит на страницу сведений с дополнительной информацией..
Вот пример кода для обработки объектов.Вы знаете, как заполнить tableView методами его делегата, поэтому я пропускаю эту часть.
Предположим, нам нужен список событий на главной странице, а затем действия каждого события на странице сведений.Начните с двух управляемых объектов Realm;объект события, имеющий дату начала и окончания, заголовок события и список действий в этом событии.Тогда есть объект действия.
class EventClass: Object {
@objc dynamic var start_date: Date?
@objc dynamic var end_date: Date?
@objc dynamic var event_title = ""
let activities = List<ActivityClass>()
}
class ActivityClass: Object {
@objc dynamic var title = ""
}
записать событие с некоторыми действиями в область
let formatter = DateFormatter()
formatter.dateFormat = "yyyymmdd"
let e0 = EventClass()
e0.event_title = "Workshop"
e0.start_date = formatter.date(from: "20180113")
e0.end_date = formatter.date(from: "20180119")
let a0e0 = ActivityClass()
a0e0.title = "Some activity"
let a0e1 = ActivityClass()
a0e1.title = "Another activity"
let a0e2 = ActivityClass()
a0e2.title = "Activity continues"
e0.activities.append(a0e0)
e0.activities.append(a0e1)
e0.activities.append(a0e2)
// write event 0 (e0) to realm which will create the event and activities
Мы предполагаем, что и у основного, и у подробного представлений есть tableViews, поэтому загрузите события вmaster tableView dataSource, который является классом результатов Realm - он ведет себя как массив.
class ViewController: NSViewController {
var eventResults: Results<EventClass>? = nil
, а затем всякий раз, когда приходит время заполнить dataSource:
self.eventResults = realm.objects(EventClass.self)
, а затем методы делегирования tableViewможно получить каждый ряд для отображения.На главной странице это будет выглядеть примерно так:
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let cell = tableView.makeView(withIdentifier:
NSUserInterfaceItemIdentifier(rawValue: "dateCell") , owner: self) as! NSTableCellView?
//cell?.textField?.stringValue = post.dates[row]
let event = self.eventResults[row]
cell.textField?.stringValue = "Event: \(title) from: \(start) - \(end)"
return cell
}
, поэтому при просмотре строки tableView будет выглядеть примерно так:
Event: Workshop from: 2018-12-30 - 2018-01-05
Event: Workshop from: 2018-01-13 - 2018-01-19
etc
. Получите объект события от мастера.tableView datasource, self.eventResults
let tappedEvent = self.eventResults[tappedRowIndex]
, а затем получить список действий
let activityList = tappedEvent.activities
, который ActivityList может быть передан через segue (или 1000 других способов) в подробный viewController и егостановится источником данных для подробного tableView.Страница сведений следует той же схеме, за исключением того, что источником данных являются действия.
Помогает ли это?