Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法调用';追加';具有类型为';(字符串)和#x27;在我的firstViewController中_Ios_Xcode_Swift - Fatal编程技术网

Ios 无法调用';追加';具有类型为';(字符串)和#x27;在我的firstViewController中

Ios 无法调用';追加';具有类型为';(字符串)和#x27;在我的firstViewController中,ios,xcode,swift,Ios,Xcode,Swift,firstViewController。这就是问题所在。在我的“for循环”中,它给了我一个错误。我已经尝试使用Xcode建议的方法,但它不起作用。我仍然认为自己是一个初学斯威夫特的初学者。当人们发布了相同的问题,而我仍然无法解决我的问题时,我查看了其他答案 import UIKit var toDoItems:[String] = [] class FirstViewController: UIViewController, UITableViewDataSource, UITableV

firstViewController。这就是问题所在。在我的“for循环”中,它给了我一个错误。我已经尝试使用Xcode建议的方法,但它不起作用。我仍然认为自己是一个初学斯威夫特的初学者。当人们发布了相同的问题,而我仍然无法解决我的问题时,我查看了其他答案

 import UIKit

var toDoItems:[String] = []

class FirstViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet var tasksTable:UITableView?

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return toDoItems.count
    }

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

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

        cell.textLabel?.text = toDoItems[indexPath.row]

        return cell
    }

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

    override func viewWillAppear(animated: Bool) {

        if var storedToDoItems : AnyObject?  = NSUserDefaults.standardUserDefaults().objectForKey("toDoItems") {

            toDoItems = []

            for var i = 0; i < storedToDoItems?.count(); ++i {
                toDoItems.append(storedToDoItems[i] as! String)
            }

        }

        tasksTable?.reloadData()
    }


}
导入UIKit
变量toDoItems:[字符串]=[]
类FirstViewController:UIViewController、UITableViewDataSource、UITableViewDelegate{
@IBOutlet var tasksTable:UITableView?
重写func viewDidLoad(){
super.viewDidLoad()
}
func tableView(tableView:UITableView,numberofrowsinssection:Int)->Int{
返回到doitems.count
}
func tableView(tableView:UITableView,cellForRowAtIndexPath:nsindepath)->UITableView单元格{
var cell=UITableViewCell(样式:UITableViewCellStyle.Default,reuseIdentifier:“单元格”)
cell.textLabel?.text=toDoItems[indexPath.row]
返回单元
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
覆盖功能视图将出现(动画:Bool){
如果var storedToDoItems:AnyObject?=NSUserDefaults.standardUserDefaults().objectForKey(“toDoItems”){
toDoItems=[]
对于变量i=0;i
这是我的第二个视图控制器

import UIKit

class SecondViewController: UIViewController, UITextFieldDelegate {


    @IBOutlet weak var toDoItem: UITextField!

    @IBAction func addItemButton(sender: AnyObject) {

        toDoItems.append(toDoItem.text)

        let fixedToDoItems = toDoItems

        NSUserDefaults.standardUserDefaults().setObject(fixedToDoItems, forKey: "todDoItems")
        NSUserDefaults.standardUserDefaults().synchronize()

        self.view.endEditing(true)

    }

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

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

    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }

    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
        self.view.endEditing(true)
    }


}
导入UIKit
类SecondViewController:UIViewController、UIExtFieldDelegate{
@IBOUTLE弱var toDoItem:UITextField!
@iAction func addItemButton(发件人:AnyObject){
toDoItems.append(toDoItem.text)
让fixedToDoItems=toDoItems
NSUserDefaults.standardUserDefaults().setObject(fixedToDoItems,forKey:“ToDoItems”)
NSUserDefaults.standardUserDefaults().synchronize()
self.view.endEditing(true)
}
重写func viewDidLoad(){
super.viewDidLoad()
//加载视图后,通常从nib执行任何其他设置。
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
func textField应返回(textField:UITextField)->Bool{
textField.resignFirstResponder()辞职
返回真值
}
覆盖func touchesBegined(触摸:设置,withEvent事件:UIEvent){
self.view.endEditing(true)
}
}

当您从
NSUserDefaults
加载待办事项列表数组时,使用
if let
来测试它是否是
[String]
(即字符串数组),然后您就不需要稍后将其强制转换为
字符串,这可能会导致您的错误。尝试将您的
视图将出现
方法替换为以下内容:

override func viewWillAppear(animated: Bool) {

    if let storedToDoItems = NSUserDefaults.standardUserDefaults().objectForKey("toDoItems") as? [String] {

        toDoItems = []

        for var i = 0; i < storedToDoItems.count; ++i {
            toDoItems.append(storedToDoItems[i])
        }
    }

    tasksTable?.reloadData()
}
但是,在这种情况下,您应该能够直接从加载的变量设置变量:

override func viewWillAppear(animated: Bool) {

    if let storedToDoItems = NSUserDefaults.standardUserDefaults().objectForKey("toDoItems") as? [String] {
        toDoItems = storedToDoItems
    }

    tasksTable?.reloadData()
}

这起作用了。谢谢你,罗伯特。现在我正试图让数组显示在控制台中。它没有显示我放在数组中的元素。我想我可以使用一个简单的println()将它打印到控制台以显示元素。您应该能够添加一个
println(toDoItems)
,作为
的最后一件事,如果让
块验证它是否正确加载了您的项目。我做到了,但是它仍然没有显示应该加载的项目。会发生什么?如果它是nothing,则
If let
语句可能失败(它在
NSUserDefaults
中找不到字符串数组)。如果let
,请尝试在
中添加
else
,以查看是否确实如此。如果是,您可能还没有写入
NSUserDefaults
“toDoItems”(或者您编写的不是字符串数组)。
override func viewWillAppear(animated: Bool) {

    if let storedToDoItems = NSUserDefaults.standardUserDefaults().objectForKey("toDoItems") as? [String] {
        toDoItems = storedToDoItems
    }

    tasksTable?.reloadData()
}