Задать вопрос
  • WOW.js: почему исчезают элементы после анимации?

    Hastle
    @Hastle
    https://github.com/Hastle
    Здравствуйте, пропишите класс animated. Запись должна примерно выглядеть так class="wow fadeInUp animated" data-wow-delay="0.5s"
    Ответ написан
    Комментировать
  • Передать данные между контроллерами программно?

    @iFamily
    Expert in Server-Side-Swift and iOS development
    Если пользуешься storyboard, тогда передать данные можно через prepareForSegue

    Допустим у тебя есть NextViewController с переменной name: String
    class NextViewController: UIViewController {
        var name: String!
    }

    и тебе нужно в него передать имя, тогда в prepareForSegue есть два способа детектить переход на NextViewController:

    1. Если у нас имеется только один переход на NextViewController или их много с разных кнопок, но данные всегда одинаковые
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let dest = segue.destination as? NextViewController {
            dest.name = "Jessica"
        }
    }


    2. Если у нас имеются разные переходы на NextViewController и набор передаваемых данных различается
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let dest = segue.destination as? NextViewController {
            if segue.identifier == "action1" {
                dest.name = "Jessica"
            } else if segue.identifier == "action2" {
                dest.name = "Jessica"
                dest.sex = "female"
            }
        }
    }


    В случае если программно создаете переход, то еще проще все. Снова два варианта как достучаться до NextViewController:

    1. Он находится на storyboard
    let dest = storyboard?.instantiateViewController(withIdentifier: "NextViewController") as! NextViewController


    2. Или он не на storyboard...
    let dest = NextViewController(nibName:"NextViewController", bundle: nil)


    Дальше прикрепляем данные

    dest.name = "Jessica"

    И два варианта как открыть NextViewController:

    1. При наличии navigationController'a
    navigationController?.pushViewController(dest, animated: true)


    2. Просто модальным окном
    dest.modalPresentationStyle = .fullScreen
    dest.modalTransitionStyle = .coverVertical
    present(dest, animated: true, completion: nil)


    Чтобы обратно из второго в первый данные передавать, можно использовать delegate или notifications.

    Если делегаты
    protocol NextViewControllerDelegate {
        func callback(_ someString: String)
    }
    
    class NextViewController: UIViewController {
        var name: String!
        var delegate: NextViewControllerDelegate?
    
        func someMethod() {
            delegate?. callback("delegate callback")
        }
    }
    
    //Тут контроллер из которого открываем CustomViewController, нам помимо name нужно теперь еще задать delegate=self
    
    class HomeViewController: UIViewController, NextViewControllerDelegate {
       override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if let dest = segue.destination as? NextViewController {
                dest.name = "Jessica"
                dest.delegate = self
            }
        }
    
        //MARK: NextViewControllerDelegate
        func callback(_ someString: String) {
            print("got callback with string: \(someString)")
        }
    }


    Если notifications
    let kNotifNextViewControllerCallback = NSNotification.Name(rawValue: "kNotifNextViewControllerCallback")
    
    class NextViewController: UIViewController {
        var name: String!
    
        func someMethod() {
            NotificationCenter.default.post(name: kNotifNextViewControllerCallback, object: "notification text")
        }
    }
    
    //Тут HomeViewController из которого открываем CustomViewController, мы в нем будем слушать kNotifNextViewControllerCallback в метод gotNotification
    
    class HomeViewController: UIViewController {
        override func viewDidLoad() {
            super.viewDidLoad()
            NotificationCenter.default.addObserver(self, selector: #selector(gotNotification(notification:)), name: kNotifNextViewControllerCallback, object: nil)
        }
    
        deinit {
            NotificationCenter.default.removeObserver(self)
        }
    
        override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if let dest = segue.destination as? NextViewController {
                dest.name = "Jessica"
            }
        }
    
        //MARK: Notification observer
        func gotNotification(notification: Notification) {
            print("got notification with object: \(notification.object)")
        }
    }
    Ответ написан
    Комментировать
  • Swift 3.0 Core Data - фоновое обновление?

    @sojik
    Вам надо настроить в проекте возможность Background Fetch
    Затем реализовать один метод - application(_:performFetchWithCompletionHandler:) - который будет побыстрому запрашивать обновленные данные с сервера
    Более подробно здесь - https://www.raywenderlich.com/92428/background-mod... - раздел про Background fetch
    Сама логика обновления уже зависит от вас. Например, если у вас чат, то вы запрашиваете сообщения больше id которые уже в базе. Или сообщения, дата которых больше тех, что уже в базе. Обычно тот же запрос, который вы используете при старте приложения, чтобы обновить данные, вы можете засунуть и в этот запрос. Но надо иметь ввиду, что телефон сам выбирает, когда запрашивать обновление данных - это могут быть каждый 10 минут, а могут быть и часы.
    То есть еще раз. Ваш телефоно в бэкграунде обращается к Core Data и выясняет дату последних данных, или id или еще чего. На основе этого запрашивает новые данные у вашего сервера. Полученные данные разбирает и складывает в Core Data и снова укладывается спать, до следующего пробуждения системой.
    Ответ написан
    Комментировать
  • Swift 3.0 Core Data - фоновое обновление?

    @freeg0r
    .. some dude ..
    Недавно встретил в Appboy есть возможность фонового пуша (APNS), который может запускать фоновый процесс в приложении. Кроме того можете запускать обновление Core Data в бекграунде, когда пользователь выходит из приложения, или если находит метки геолокации. Вот здесь табличку можете посмотреть, все понятно по моему https://developer.apple.com/library/content/docume... ..и это от Swift не зависит..
    Ответ написан
    Комментировать