当我尝试使用CoreData数据创建TableView时,我收到此错误,并且不知道如何修复它。我将CoreData保存在另一个类中。我不知道我是否正确创建了TableView。
class listEvents: UITableViewController {
var logTableView = UITableView(frame: CGRectZero, style: .Plain)
let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
var eventItems: AnyObject?
override func viewDidLoad() {
super.viewDidLoad()
var viewFrame = self.view.frame
viewFrame.origin.y += 20
viewFrame.size.height -= 20
logTableView.frame = viewFrame
self.view.addSubview(logTableView)
logTableView.registerClass(UITableViewCell.classForCoder(), forCellReuseIdentifier: "EventCell")
logTableView.dataSource = self
fetchLog()
}
override func viewDidAppear(animated: Bool) {
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return eventItems!.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("EventCell") as! UITableViewCell!
let eventItem = eventItems! [indexPath.row] <-- Error here
cell.textLabel?.text = eventItem.name
return cell
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let eventItem = eventItems! [indexPath.row] <-- Error here
print(eventItem.id)
}
func fetchLog() {
let fetchRequest = NSFetchRequest(entityName: "Event")
let sortDescriptor = NSSortDescriptor(key: "name", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]
do{
if let fetchResults = try managedObjectContext.executeFetchRequest(fetchRequest) as? [Event] {
eventItems = fetchResults
}
}catch{
print("ERROR")
}
}
}
答案 0 :(得分:1)
你有这个声明:
var eventItems: AnyObject?
然后你会这样做:
let eventItem = eventItems! [indexPath.row]
问题是您将eventItems
声明为AnyObject?
,而AnyObject
不接受下标。它可以完全是任何对象,并不是每个类都使用下标,所以Swift不知道该怎么做。
由于您将eventItems
指定为获取请求的结果,因此应将其声明为NSArray?
或类似[Event]?
。此外,在!
之后使用eventItems
会使您面临严重的崩溃风险;不要使用!
,除非你绝对确定你不会意外地获得零值。