2016-02-08 3 views
0

Im создание простого приложения для ввода текста с таймером. Таймер должен быть в виде индикатора выполнения, который уменьшается каждую секунду.Непризнанный селектор, например, ошибка Swift

Чтобы реализовать индикатор прогресса, я намеревался установить прогресс на 0,1 меньше текущего хода каждые 1 секунду. Но есть ошибка «Непризнанный селектор, например», когда я устанавливаю прогресс. Есть ли другой способ обойти.

import Foundation 
import UIKit 

class TestView: UIViewController, UITextInputTraits { 


    @IBOutlet weak var TestLabel: UILabel! 
    @IBOutlet weak var TypingField: UITextField! 
    @IBOutlet weak var progressView: UIProgressView! 

    var time : Float = 0.0 
    var timer: NSTimer! 
    var test = 0; 
    var progress : Float = 1 
    var myMutableString = NSMutableAttributedString() 
    var testStringArray = ["abode" , "tutorial" , "completed", 
          "war", "method", "continue", 
          "machine", "texting" , "iterate"] 
    var idx = 0;  
    var setProg : Float = 1  

    func textFieldDidChange(textField: UITextField) { 

     let s = TypingField.text! 

     if(s.characters.last == " "){ 
      let word = s.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) 

      if(!word.isEmpty){ 
       print(testStringArray[idx]) 
       if(word == testStringArray[idx]){ 
        idx++; 
        TypingField.text = ""; 
        TestLabel.text = testStringArray[idx]; 
       }else{ 
        TypingField.text = ""; 
       } 
      } 
     } 
    } 

    func setProgress() { 
     setProg -= 0.1 
     progressView.progress = setProg <-- cannot decrement progress bar 

    } 



    override func viewDidLoad() { 
     super.viewDidLoad() 

     TypingField.autocorrectionType = .No 
     TypingField.autocapitalizationType = .None 

     timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector:Selector("setProgress"), userInfo: nil, repeats: true) 

     TestLabel.text = testStringArray[idx]; 

     TypingField.addTarget(self, action: "textFieldDidChange:", forControlEvents: UIControlEvents.EditingChanged)        
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 
+0

Хорошая вероятность, что эта строка вызывает проблему ... 'timer = NSTimer.scheduledTimerWithTimeInterval (1, target: self, selector: Selector (" setProgress "), userInfo: nil, repeatts : true) 'try change to' timer = NSTimer.scheduledTimerWithTimeInterval (1, target: self, selector: "setProgress", userInfo: nil, repeatts: true) ' – MikeG

+0

Дайте мне знать, если это не сработает, и я буду смотреть больше близко – MikeG

+0

I second @MikeG: http://stackoverflow.com/questions/24007650/selector-in-swift?rq=1 –

ответ

0

Вы засекретили scheduledTimerWithTimeInterval таким образом, как это делается с Objective-C. В Swift это делается по-другому. Вместо того, чтобы:

selector:Selector("setProgress") 

просто использовать:

selector:"setProgress" 
+0

Привет, я получил ту же ошибку ... но когда я раскомментирую 'progressView.progress = setProg', программа будет просто работать нормально .. может быть, установка прогресса приведет к ошибке? – XDProgrammer

+1

Соединились ли вы правильно с розеткой? Это единственная причина, по которой я могу думать о ошибке «непризнанный селектор, посланный экземпляру ...» – MikeG

+0

@MikeG Я проверил еще раз, я думаю, что у меня есть .. правильно связанный он, – XDProgrammer

0

Изменение функции декларирования func setProgress() к:

func setProgress(sender: NSTimer) 

И изменить Selector("setProgress") к "setProgress:"

EDIT:

По-видимому, метод setProgress уже существует, поэтому вам нужно будет переименовать функцию, например. до setProgressBar или что-то в этом роде.

Метод «setProgress» с селектором Objective-C «setProgress:» конфликты с сеттера для «прогресса» с тем же селектором Objective-C

+0

Не будет ли это '' setProgress''? Я использовал этот синтаксис -> '' setProgress: '' при работе с 'NSNotificationCenter' – MikeG

+1

. Когда вы добавляете отправителя к (или другому параметру) в функцию, вам нужно добавить двоеточие в конец селектора.Но, видимо, 'setProgress:' конфликтует с другим сеттером, поэтому вы должны назвать свою функцию чем-то еще. Я получаю: 'Method 'setProgress' с селектором Objective-C 'setProgress:' конфликтует с setter для 'progress' с тем же селектором Objective-C' – xoudini

+0

Я по-прежнему та же ошибка, я добавил отправителя параметра. Я изменил имя функции, потому что есть конфликт, но ошибка все еще существует .. Я думаю, что когда я устанавливаю прогресс 'progressView.progress = setProg'. Ошибка исчезнет, ​​если я прокомментирую эту строку. – XDProgrammer

-1

Я думаю, что ошибка была исправить, когда я удалить и заново прогресс. Возможно, это было так, как предположил MikeG о некорректном подключении к розетке. Anyways благодарит все за вашу помощь.