2015-11-17 3 views
1

Моя основная проблема заключается в том, что я не получаю текст, который я вводил, чтобы войти в ярлык или таблицу, которую я сделал (небольшое отклонение, но хотел немного ее настроить). Я не получаю никаких ошибок, но может кто-то взглянуть на этот код и посмотреть, есть ли в нем серьезные ошибки, которые я могу игнорировать? Редактировать: Я продолжаю возвращаться и изменять мелкие вещи типа типа, но ничего не работает. Вот весь мой код, в случае, если это имеет смысл для всехПроблема с вводом текстового поля в таблицу

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate, UITableViewDelegate { 

var weatherList = [String]() 

@IBOutlet weak var textField: UITextField! 

@IBOutlet weak var textLabel: UILabel! 

@IBAction func searchButton(sender: AnyObject) { 

    weatherList.append(textField.text!) 

    textField.text = "" 

    NSUserDefaults.standardUserDefaults().setObject(weatherList, forKey: "weatherList") 

} 

@IBOutlet weak var tableView: UITableView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    if NSUserDefaults.standardUserDefaults().objectForKey("weatherList") != nil { 

     weatherList = NSUserDefaults.standardUserDefaults().objectForKey("weatherList") as! [String] 

    } 

    self.textField.delegate = self 

} 

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

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return weatherList.count 

} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell") 

    cell.textLabel?.text = weatherList[indexPath.row] as String 

    return cell 

} 

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 

    if editingStyle == UITableViewCellEditingStyle.Delete { 

     weatherList.removeAtIndex(indexPath.row) 

     NSUserDefaults.standardUserDefaults().setObject(weatherList, forKey: "weatherList") 

     tableView.reloadData() 

    } 

} 

override func viewDidAppear(animated: Bool) { 
    tableView.reloadData() 

} 

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

    self.view.endEditing(true) 

} 

func textFieldShouldReturn(textField: UITextField) -> Bool { 

    textField.resignFirstResponder() 

    performAction() 

    return true 

} 

func performAction() { 

    weatherList.append(textField.text!) 

    textField.text = "" 

    NSUserDefaults.standardUserDefaults().setObject(weatherList, forKey: "weatherList") 

} 

} 

ответ

1

От NSUserDefaults class reference:

Класс NSUserDefaults предоставляет удобные методы для доступа к распространенных типов, таких как поплавки, удваивается, целые числа, булевы , и URL-адреса. Объектом по умолчанию должен быть список свойств, то есть экземпляр (или для коллекций - комбинация экземпляров): NSData, NSString, NSNumber, NSDate, NSArray или NSDictionary. Если вы хотите сохранить какой-либо объект типа , его обычно необходимо архивировать для создания экземпляра NSData .

Это не быстрые массивы. Используйте NSMutableArray вместо:

var weatherList:NSMutableArray = NSMutableArray() 

затем

self.weatherList.addObject(textField.text) 
+0

Я установил, что, но теперь я получаю ошибку в моем AppDelegate на первой линии | класс AppDelegate: UIResponder, UIApplicationDelegate {| который говорит, что поток 1: сигнал SIGABRT – Fumbles

+0

В вашем коде вы по-прежнему используете массив быстрого стиля. NSUserDefaults может принимать только перечисленные выше типы объектов. Вы также не можете делать так: weatherList = NSUserDefaults.standardUserDefaults(). ObjectForKey ("weatherList") как! [String] Если вы хотите использовать NSUserDefaults, вам нужно использовать NSArray. Вот еще один вопрос с той же проблемой и тот же ответ, который я дал: http://stackoverflow.com/questions/32798887/app-delegate-weird-error-when-trying-to-add-element-to-nsuserdefaults – beyowulf

+0

Хорошо, если я изменю его на массив, что мне изменить _NSUserDefaults.standardUserDefaults(). SetObject (weatherList, forKey: "weatherList") _ и _weatherList = NSUserDefaults.standardUserDefaults(). ObjectForKey ("weatherList") _ to? – Fumbles

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