Сбой приложения iOS во время жеста смахивания?

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

Я искал решение, но не могу понять, почему он падает. Я добавил свой ":" в свое действие, а также добавил UIGestureRecognizerDelegate в свои классы.

Приложение запустится, оно просто вылетает, когда я выполняю свайп.
Вот мой код:

class ViewController: UIViewController, UIGestureRecognizerDelegate {

override func viewDidLoad() {
    super.viewDidLoad()

    var swipeRight = UISwipeGestureRecognizer(target: self, action: "swiped:")
    swipeRight.direction = UISwipeGestureRecognizerDirection.Right
    self.view.addGestureRecognizer(swipeRight)

    var swipeUp = UISwipeGestureRecognizer(target: self, action: "swiped:")
    swipeUp.direction = UISwipeGestureRecognizerDirection.Up
    self.view.addGestureRecognizer(swipeUp)


    func swiped(gesture: UIGestureRecognizer) {

        if let swipeGesture = gesture as? UISwipeGestureRecognizer {

            switch swipeGesture.direction {

            case UISwipeGestureRecognizerDirection.Right:
                print("swiped right")
            case UISwipeGestureRecognizerDirection.Up:
                print("swiped up")
            default:
                break

            }

        }

    }



}

Сообщение об ошибке, которое я получаю, выглядит следующим образом.

2015-10-26 10:59:52.944 Swipes and Shakes[2764:444281] -[Swipes_and_Shakes.ViewController swiped:]: unrecognized selector sent to instance 0x7fea2a58bcd0
2015-10-26 10:59:52.950 Swipes and Shakes[2764:444281] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Swipes_and_Shakes.ViewController swiped:]: unrecognized selector sent to instance 0x7fea2a58bcd0'
*** First throw call stack:
(
    0   CoreFoundation                      0x000000010dfb2f45 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x000000010fccedeb objc_exception_throw + 48
    2   CoreFoundation                      0x000000010dfbb56d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
    3   CoreFoundation                      0x000000010df08eea ___forwarding___ + 970
    4   CoreFoundation                      0x000000010df08a98 _CF_forwarding_prep_0 + 120
    5   UIKit                               0x000000010ecae37c _UIGestureRecognizerSendTargetActions + 153
    6   UIKit                               0x000000010ecaacf6 _UIGestureRecognizerSendActions + 162
    7   UIKit                               0x000000010eca8cf3 -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] + 843
    8   UIKit                               0x000000010ecb0c9f ___UIGestureRecognizerUpdate_block_invoke877 + 79
    9   UIKit                               0x000000010ecb0b3d _UIGestureRecognizerRemoveObjectsFromArrayAndApplyBlocks + 342
    10  UIKit                               0x000000010ec9edb1 _UIGestureRecognizerUpdate + 2634
    11  UIKit                               0x000000010e840684 -[UIWindow _sendGesturesForEvent:] + 1137
    12  UIKit                               0x000000010e8418ba -[UIWindow sendEvent:] + 849
    13  UIKit                               0x000000010e7f101a -[UIApplication sendEvent:] + 263
    14  UIKit                               0x000000010e7cb8c7 _UIApplicationHandleEventQueue + 6844
    15  CoreFoundation                      0x000000010dedf011 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    16  CoreFoundation                      0x000000010ded4f3c __CFRunLoopDoSources0 + 556
    17  CoreFoundation                      0x000000010ded43f3 __CFRunLoopRun + 867
    18  CoreFoundation                      0x000000010ded3e08 CFRunLoopRunSpecific + 488
    19  GraphicsServices                    0x00000001125d7ad2 GSEventRunModal + 161
    20  UIKit                               0x000000010e7d1031 UIApplicationMain + 171
    21  Swipes and Shakes                   0x000000010ddd326d main + 109
    22  libdyld.dylib                       0x00000001107d092d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

person Caleb Bach    schedule 26.10.2015    source источник
comment
Вы не можете поместить объявление своей функции внутрь другой функции.   -  person dan    schedule 26.10.2015
comment
Сообщение об ошибке: неперехваченное исключение «NSInvalidArgumentException», причина: «-[Swipes_and_Shakes.ViewController swiped:]: отправлен нераспознанный селектор, который точно объясняет ошибку. Также кажется, что Simulatoe не только приводит к сбою вашего приложения в симуляторе, это большая разница.   -  person zaph    schedule 26.10.2015
comment
Он не помещает объявление функции внутрь другого. Просто неправильный отступ.   -  person kientux    schedule 26.10.2015
comment
Хорошо, спасибо вам обоим за ваш вклад. Итак, что касается моей функции внутри функции, где она? Что касается моего селектора, который не распознается, где именно это? Я определил его, и я пытаюсь вызвать его в своей функции. Изменить: так что мой отступ просто выключен.   -  person Caleb Bach    schedule 26.10.2015
comment
И на самом деле в Swift вы можете поместить функцию внутрь другой функции.   -  person kientux    schedule 26.10.2015
comment
Можете ли вы отредактировать свой вопрос, опубликовать правильный код, который вы используете?   -  person kientux    schedule 26.10.2015
comment
Извините за это, сейчас есть обновление моего кода.   -  person Caleb Bach    schedule 26.10.2015
comment
func swiped(gesture: UIGestureRecognizer) находится внутри функции override func viewDidLoad(). Посмотрите на фигурные скобки и углубления. Исправьте это.   -  person zaph    schedule 26.10.2015
comment
Спасибо, ребята, разобрались! Могу ли я получить голос «за» по вопросу, чтобы сбалансировать голос «против», который я каким-то образом дал себе? Я не хочу терять право задавать вопросы.   -  person Caleb Bach    schedule 26.10.2015
comment
Я думаю, что начиная с Swift 2.0 он начинает использовать #selector в действиях, которые решают эти проблемы во время компиляции. Попробуйте обновить свой xcode или компилятор как минимум до версии swift 2.3.   -  person nuynait    schedule 09.10.2016


Ответы (2)


Объявите, что смахнули за пределы viewDidLoad, и он не должен падать

class ViewController: UIViewController, UIGestureRecognizerDelegate {

override func viewDidLoad() {
    super.viewDidLoad()

    var swipeRight = UISwipeGestureRecognizer(target: self, action: "swiped:")
    swipeRight.direction = UISwipeGestureRecognizerDirection.Right
    self.view.addGestureRecognizer(swipeRight)

    var swipeUp = UISwipeGestureRecognizer(target: self, action: "swiped:")
    swipeUp.direction = UISwipeGestureRecognizerDirection.Up
    self.view.addGestureRecognizer(swipeUp)
}

func swiped(gesture: UIGestureRecognizer) {

    if let swipeGesture = gesture as? UISwipeGestureRecognizer {

        switch swipeGesture.direction {

        case UISwipeGestureRecognizerDirection.Right:
            print("swiped right")
        case UISwipeGestureRecognizerDirection.Up:
            print("swiped up")
        default:
            break

        }

    }

}
person Nikolay Nankov    schedule 26.10.2015
comment
Так просто, как, что. Большое спасибо, ребята. - person Caleb Bach; 26.10.2015

Вы должны объявить свою функцию вне функции загрузки представления. Попробуй это.

person TekiTalks    schedule 26.10.2015