2015-06-02 2 views
1

В проекте Swift + SQLite Я пытаюсь заполнить массив из 4 кнопок в моем пользовательском интерфейсе SQL-запросом. Лучшее, что я мог бы сделать до сих пор, это показать код ниже, но я уверен, что это можно сделать чище. Я попытался выполнить как чтение результатов запроса SQL, так и изменение кнопки в том же цикле, но получил все виды несоответствий типа и контрольные ошибки.
Любое предложение будет высоко оценено.Swift Button Array

var answerText: Array<String?> = ["","","",""] 

class ViewController: UIViewController { 

@IBOutlet var answerButton: Array<UIButton> = [] 

func displayQuestion(questionNumber: Int){ 

    let querySQL = "SELECT answer FROM answers WHERE answers.question = '\(questionNumber)'" 
    let results:FMResultSet? = myDatabase.executeQuery(querySQL, 
     withArgumentsInArray: nil) 
    var j=0 
    while results?.next() == true { 
     answerText[j] = results?.stringForColumn("answer") 
     j=j+1 
    } 
    j=0 
    for item in answerButton{ 
     var button:UIButton = item as UIButton 
     button.setTitle(answerText[j], forState: UIControlState.Normal) 
     j=j+1 
    } 
    } 
} 
+0

не могли бы вы подробнее рассказать о нем ??????? –

+0

Что произойдет, если ваш SQL-запрос занимает много времени? Тогда я ожидаю, что ваши результаты будут пустыми, пока остальная часть вашего кода выполнит –

ответ

2

Вы получаете ссылочную ошибку, потому что вы объявляете массив как IBoutlet. если ваш answerButton, имеющий объекты UIButton, который не должен быть @IBOutlet var answerButton: Array = []. ответButton объявлен как этот var ответButton: Array = [].

пожалуйста, изменить ниже код согласно вам код, если вы хотите проверить код, приведенный ниже, чем просто скопировать и мимо него в Func viewDidLoad() вашего ViewController и это покажет вам четыре кнопки на просмотре

 var answerText: Array<String?> = ["Button1","Button2","Button3","Button4"] 

    var answerButton: Array<UIButton> = [] 

    for var i = 0; i<=answerText.count; i++ { 

     var button = UIButton.buttonWithType(.System) as! UIButton 

     button.titleLabel!.font = UIFont.systemFontOfSize(12) 

     button.titleLabel!.lineBreakMode = .ByTruncatingTail 

     var numberOfButton = 5 
     let j = i 
     var y:CGFloat = (CGFloat)(j*690/(numberOfButton+1)-21); 
     button.frame.size.height = 42 
     button.frame.size.width = 150 
     button.frame.origin.y = y 
     button.frame.origin.x = 250.0 
     answerButton .insert(button, atIndex: i) 

    } 

for var i = 0; i<answerText.count; i++ { 

     var button:UIButton = answerButton [i] 

     button.setTitle(answerText[i], forState: UIControlState.Normal) 

     self.view .addSubview(button) 
    } 
} 
0
var buttons: [UIButton?] { 
    return [self.firstButton, self.secondButton, self.thirdButton] 
} 
+1

. Некоторое объяснение, что делает этот код и как оно решает проблему, было бы неплохо. – JJJ

 Смежные вопросы

  • Нет связанных вопросов^_^