
Alexander
20.01.2017
21:09:47
сделал так let prevController = self.presentingViewController as! SetListViewController
получил Could not cast value of type 'UINavigationController' (0x10cc69008) to SetListViewController

-_-
20.01.2017
21:11:19
можно кинуть Notification, можно контроллеру передать блок, который он выполнит перед закрытием

Google

Alexander
20.01.2017
21:12:32
видно. но для меня пока не очевидно как получить именно setListcontroller
как-то аля self.presentingViewController.контроллер as! SetListViewController

-_-
20.01.2017
21:13:12
как ты презентишь контроллер добавления записи?

Alexander
20.01.2017
21:13:53
в верхнем нав табе кнопочка
+

-_-
20.01.2017
21:15:39
Ну или тип такого
let navVC = self.presentingViewController as! UINavigationController
let prevController = navVC.visibleViewController as! SetListViewController

Alexander
20.01.2017
21:16:26
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "AddSetButtonPressed") {
let controller = segue.destination as! AddSetViewController
controller.exercise = self.exercise!
controller.workout = self.workout
}
}

-_-
20.01.2017
21:17:43
Ааа, тут еще и сториборд
Имхо нотификейшн проще всего

Alexander
20.01.2017
21:18:19
можно ссылочку почитать что это
и если возможно то пример

-_-
20.01.2017
21:18:32
http://stackoverflow.com/questions/24049020/nsnotificationcenter-addobserver-in-swift

Google

-_-
20.01.2017
21:18:39
Вот тут пример как подписаться

Alexander
20.01.2017
21:18:51
спасибо

-_-
20.01.2017
21:18:58
а, ну ниже есть и как отправить
Общий смысл - есть NotificationCenter, это фигня, которая позволяет отправлять сообщения по ключу.
В контроллере с данными ты подписываешься на сообщения. Ключ какой-нибудь свой делаешь (это строка). И устанавливаешь метод, который дернется при получении такого сообщения. В этом методе уже апдейтишь tableView или что там у тебя.
В контроллере с добавлением записи после успешного добавления ты просто отправляешь сообщение по ключу.
Контроллер списка его поймает и сделает обновление.
Главное потом контроллер списка надо отписать от центра этого

Taras
20.01.2017
21:21:50
Доброй ночи)
Помогите, пожалуйста, решить вопрос. На stackoverflow не сильно помогли :(
http://stackoverflow.com/questions/41703230/dashed-uibezierpath-subpath-junctions

Alexander
20.01.2017
21:22:24
а. тригеры (аналогия js)
смысл понял
щас гляну реализацию. спасибо за наводку.
хотел попробовать проще и быстрее
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "AddSetButtonPressed") {
let controller = segue.destination as! AddSetViewController
controller.exercise = self.exercise!
controller.workout = self.workout
controller.setListController = self
}
}
добавил controller.setListController = self
и собсна dismiss(animated: true, completion: nil)
self.setListController!.tableView.reloadData()
но не сработало

-_-
20.01.2017
21:28:36
Ну так писать это на самом деле некрасиво

Alexander
20.01.2017
21:28:51
я понимаю что это костыли

Евгений
20.01.2017
21:28:55

Alexander
20.01.2017
21:29:10
просто решил попробовать. вникаю так сказать

-_-
20.01.2017
21:29:29
Хотя странно, что не заработало
Живой ли этот setListController

Google

Alexander
20.01.2017
21:31:04
там же ! стоит - ошибка бы была
но вообще вот скрин https://yadi.sk/i/PZ8PMe9s3A4xqg

-_-
20.01.2017
21:31:49
А. Я просто свифт не знаю. Тогда вдвойне странно
Хм
Попробуй до дисмисса его дёрнуть
Раз уж так)

Alexander
20.01.2017
21:33:12
ничего не изменилось

-_-
20.01.2017
21:33:26
Стоп
А данные для tableView ты как вообще берешь?

Евгений
20.01.2017
21:33:51
никак

-_-
20.01.2017
21:33:56
Толку от reloadData, если у тебя они не менялись
Сделай в своём контроллере метод needUpdateData

Alexander
20.01.2017
21:34:52
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if (self.fetchedResultsController != nil) {
if self.fetchedResultsController!.fetchedObjects!.count == 0 {
do {
try self.fetchedResultsController!.performFetch()
} catch let error as NSError {
print("Could not fetch \(error), \(error.userInfo)")
}
}
return self.fetchedResultsController!.fetchedObjects!.count
} else {
return 0
}
}

-_-
20.01.2017
21:35:03
В нем сначала заново считай данные (в массив или как они там лежат), а потом дёрни reloadData
Ну, тут тож понятно
Он у тебя в этом методе и не загрузит их заново

Alexander
20.01.2017
21:35:43
точно NSFetchedResultsControllerDelegate не причем?

-_-
20.01.2017
21:35:57
Тут другая ситуация
У тебя проверяется есть ли объекты только в первый раз
И они грузятся

Google

-_-
20.01.2017
21:36:38
А в следующий вызов у тебя count!=0

Alexander
20.01.2017
21:37:10
ща гляну заходит ли туда вообще

-_-
20.01.2017
21:37:25
Убери проверку на count == 0
Чтобы всегда делало performFetch
И попробуй свой вариант
Что на скрине был

Admin
ERROR: S client not available

Alexander
20.01.2017
21:38:17
да. эта проверка срабатывает

Mikhail
20.01.2017
21:38:18
public var fetchedResultsController: NSFetchedResultsController<your instance>? {
didSet {
if let frc = fetchedResultsController {
if frc != oldValue {
frc.delegate = controller
do {
try performFetch()
} catch {
print(error)
}
}
} else {
controller.tableView.reloadData()
}
}
}
public func performFetch() throws {
if let frc = fetchedResultsController {
defer {
controller.tableView.reloadData()
}
do {
print("fetched")
try frc.performFetch()
} catch {
throw error
}
}
}

-_-
20.01.2017
21:39:12
да. эта проверка срабатывает
попробуй убрать временно
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if (self.fetchedResultsController != nil) {
do {
try self.fetchedResultsController!.performFetch()
} catch let error as NSError {
print("Could not fetch \(error), \(error.userInfo)")
}
return self.fetchedResultsController!.fetchedObjects!.count
} else {
return 0
}
}
Вот так

Alexander
20.01.2017
21:40:04
да. так работает
но я этот пример где-то скопипиздил

-_-
20.01.2017
21:40:29
в нем
{
do {
try self.fetchedResultsController!.performFetch()
} catch let error as NSError {
print("Could not fetch \(error), \(error.userInfo)")
}
self.tableView.reloadData()
}
а на dismiss вызови self.setListController!.needUpdateData()

Alexander
20.01.2017
21:41:57
вариант
спасибо. завел то что хотелось. правда не покидает мысль что накостылял жутко...

-_-
20.01.2017
21:59:33
Ну, судя по кускам кода, там и до этого костылей хватало ?

Maxx
20.01.2017
22:25:21
у меня есть uitableviewcontroller из которого я в модальном окне добавляю строку в базу
1. назначь TableVC делегатом второго VC
2. второй VC презентуется, например, по методу делегата didSelectRow... - у него протокольный метод, обновляющий модель
3. по завершении добавления данных:
UI - второй VC сворачивается, обновляется модель
TableVC реализует протокольный метод второго VC, в нем передаются в качестве параметров а) экземпляр второго VC б) данные какие-нибудь нужные, TableVC по завершении вызывает reloadData()
как презентовать-убрать второй контроллер, собссно, разницы большой нет: модально или пушить в стек, кому что больше подходит

Google

Maxx
20.01.2017
22:26:10
ну естественно у второго VC ты прописываешь протокол с 1 методом

Alexander
20.01.2017
22:26:47
сколько непонятных слов...попробую вкурить

Maxx
20.01.2017
22:29:37
ну если с CoreData разобрался и FetchedResultsVC, с протоколами-делегатами подавно разберешься ))

Alexander
20.01.2017
22:30:40
да. дело времени. спасибо.
буду читать мат часть

Andrey
20.01.2017
22:34:23
Кто за VIPER?

-_-
20.01.2017
22:46:42
1. назначь TableVC делегатом второго VC
2. второй VC презентуется, например, по методу делегата didSelectRow... - у него протокольный метод, обновляющий модель
3. по завершении добавления данных:
UI - второй VC сворачивается, обновляется модель
TableVC реализует протокольный метод второго VC, в нем передаются в качестве параметров а) экземпляр второго VC б) данные какие-нибудь нужные, TableVC по завершении вызывает reloadData()
как презентовать-убрать второй контроллер, собссно, разницы большой нет: модально или пушить в стек, кому что больше подходит
Имхо достаточно было обернуть в делегат needUpdateData уже сделанный. Смысл передавать второй контроллер как параметр? Вот новые данные можно передать, как вариант, это да. И из первого контроллера их вставить в модель/показать

Andrey
20.01.2017
22:47:11

-_-
20.01.2017
22:47:59
Сука)
Ну я правда помню как он рассказывал на MBLT позапрошлом. Все так набежали как будто вакцину от СПИДа нашли)

Andrey
20.01.2017
22:48:20
У нас в проекте, мне очень нравится

-_-
20.01.2017
22:49:18
Есть кстати какой-нибудь пример випера на том же гитхабе сложнее формы входа с парой полей?

Семён
20.01.2017
23:22:26
вход с тремя полями подойдет? )

-_-
20.01.2017
23:37:19
Совсем другой разговор :D

O'Miay
20.01.2017
23:39:54
https://radio-t.com

Maxx
21.01.2017
06:59:25

Dmitry
21.01.2017
13:22:29
Ребят привет, нужен фронт как в игре Tripple Town на IOS
Кто то может ? Если да пиши сразу со своей ценой в лс.