问题:我添加" todo"然后单击"保存",TodoTableView中未列出新待办事项。
完整代码:https://github.com/gkatsanos/todolist-swift
我正在关注苹果make your first app guide但是使用XCode 8(Swift 3) - 所以我怀疑一些代码已经改变了。
特别是这部分:
@IBAction func unwindToMealList(sender: UIStoryboardSegue) {
if let sourceViewController = sender.sourceViewController as? MealViewController, meal = sourceViewController.meal {
// Add a new meal.
let newIndexPath = NSIndexPath(forRow: meals.count, inSection: 0)
meals.append(meal)
tableView.insertRowsAtIndexPaths([newIndexPath], withRowAnimation: .Bottom)
}
}
我更正了:
@IBAction func unwindToTodoList(sender: UIStoryboardSegue) {
if let source = sender.source as? TodoViewController, let todo = source.todo {
// Add a new todo.
let newIndexPath = IndexPath(row: todos.count, section: 0)
todos.append(todo)
tableView.insertRows(at: [newIndexPath], with: UITableViewRowAnimation .bottom)
}
}
(我稍微改变了做例#34; Todos"而不是吃饭。)
我正在运行我,并为该方法设置断点,if永远不会评估为true,因此我的新待办事项未保存。
我使用断点并检查变量并看到我输入的文本位于sender.source(@TEST)
中的某处这是Todo.swift基类:
class Todo {
// MARK: Properties
var name: String
// MARK: Initialization
init?(name: String) {
self.name = name
if (name.isEmpty || name == "") {
return nil
}
}
}
答案 0 :(得分:1)
问题是todo
为空。您有一个文本字段,但是您尝试从属性中获取文本。将此属性更改为计算属性,并在getter中返回文本字段的文本。
像这样改变:
var todo?: Todo {
get {
return Todo(name: nameTextField.text)
}
}
答案 1 :(得分:0)
正如@Leo指出的那样,todo
unwind
viewController
时,TodoViewController
为空。您可以在todo
中使用一种操作方法,在其中为 @IBAction func AddTodo(_ sender: AnyObject) {
if let name = nameTextField.text , !name.isEmpty {
todo = Todo(name: name)
saveButton.isEnabled = true
}
}
分配值。试试这个:
unwind
另一个选项是textField's value in this method and add your
,您可以获得@IBAction func unwindToTodoList(sender: UIStoryboardSegue) {
if let sourceViewController = sender.source as? TodoViewController {
if let name = sourceViewController.nameTextField.text {
sourceViewController.todo = Todo(name: name)
let newIndexPath = IndexPath(row: todos.count, section: 0)
if let todo = sourceViewController.todo {
todos.append(todo)
tableView.insertRows(at: [newIndexPath], with: UITableViewRowAnimation.bottom)
}
}
}
}
待办事项。
$scope.submitForm = function() {
//check to make sure the form is completely valid
if ($scope.userForm.$valid) {
alert('our form is amazing');
}
};
$scope.openCancelDialog = function(){
//alert('why am not showing CAncel');
ModalService.openModal('Analysis Error', 'I am Error Type', 'Error');
}
$scope.openErrorDialog = function(){
//alert('why am not showing Error');
ModalService.openModal('Analysis Error', 'I am cancel Type', 'Cancel');
}
答案 2 :(得分:0)
我能够修复指南建议的实际代码,执行以下操作:
// This method lets you configure a view controller before it's presented.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let name = nameTextField.text ?? ""
// Set the todo to be passed to TodoTableViewController after the unwind segue.
todo = Todo(name: name)
}
要使override
生效,我必须将发件人更改为Any
类型,而不是AnyObject
,我删除了条件。