需要更新tableView
Posted
技术标签:
【中文标题】需要更新tableView【英文标题】:Need to update tableView 【发布时间】:2015-12-03 23:04:20 【问题描述】:我正在学习 Swift 编程,我从一本有错误的书中获得了这个示例(已评论)。按下Add
按钮时,如何解决此问题并更新tableView
?我已经阅读了许多解决方案,但似乎没有一个有效。此外,tableView
在我重新加载 simulator
时更新。我已经被困了两天了,这让我发疯了! :)
import UIKit
import CoreData
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
var managedObjectContext: NSManagedObjectContext!
override func viewDidLoad()
super.viewDidLoad()
let appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
managedObjectContext = appDelegate.managedObjectContext! as NSManagedObjectContext
// 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 loadBooks() -> Array<AnyObject>
var error: NSError? = nil
var fetchRequest = NSFetchRequest(entityName: "Book")
let result: [AnyObject] = managedObjectContext!.executeFetchRequest(fetchRequest, error:&error)!
return result
func numberOfSectionsInTableView(tableView: UITableView) -> Int
return 1
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return loadBooks().count
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
var cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! UITableViewCell
var book: Book = loadBooks()[indexPath.row] as! Book
cell.textLabel!.text = book.title
return cell
@IBAction func addNew(sender: AnyObject)
let entity = NSEntityDescription.entityForName("Book", inManagedObjectContext:managedObjectContext)
var book = Book(entity: entity!,insertIntoManagedObjectContext:managedObjectContext)
book.title = "My Book:" + String(loadBooks().count)
var error: NSError?
managedObjectContext.save(&error)
myTableView.reloadData() //mistake!
【问题讨论】:
myTableViewDeclared
在哪里?
@MikeAtNobel 不是。也许在书籍编辑过程中丢失了一些代码,这不是第一次。我应该在哪里以及如何声明myTableView
?
@Kie 对如何声明 myTableView
有一个很好的答案。但出于好奇,如果从未声明过 myTableView
,它是如何编译的?
@MikeAtNobel 没有这一行:)
【参考方案1】:
你必须为你的 tableview 声明一个 outlet,它可能设置在相应的故事板视图控制器中。
import UIKit
import CoreData
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
var managedObjectContext: NSManagedObjectContext!
@IBOutlet weak var myTableView: UITableView!
// your code
请不要忘记将情节提要中的表格视图实例与新创建的插座连接起来,方法是并排打开代码和情节提要并从插座旁边的点画一条线到表格视图。
或者您可以使用苹果在此处描述的方式 (https://developer.apple.com/library/ios/recipes/xcode_help-IB_connections/chapters/CreatingOutlet.html) 从情节提要的表格视图中创建您的出口。
【讨论】:
【参考方案2】:编辑: 没关系,我意识到如果你没有连接数据源和委托,那么崩溃就会在 addNew() 之前发生。
Kie 的回答是正确的,但是要查看实际结果,您还需要将 tableView 的 dataSource 和委托连接到您的类。 您可以在情节提要中执行此操作,也可以在 viewDidLoad 方法中的代码中执行此操作。
override func viewDidLoad()
super.viewDidLoad()
myTableView.dataSource = self
myTableView.delegate = self
// Additional code
【讨论】:
以上是关于需要更新tableView的主要内容,如果未能解决你的问题,请参考以下文章