gpt4 book ai didi

swift - CoreData/TableView - 'subscript' 的使用不明确

转载 作者:行者123 更新时间:2023-11-28 16:15:20 24 4
gpt4 key购买 nike

当我尝试使用 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")
}
}
}

最佳答案

你有这个声明:

var eventItems: AnyObject?

然后您稍后执行此操作:

let eventItem = eventItems! [indexPath.row] 

问题是您将 eventItems 声明为 AnyObject?,而 AnyObject 不接受下标。它完全可以是任何对象,并不是每个类都使用下标,所以 Swift 不知道该怎么做。

由于您要将 eventItems 作为获取请求的结果进行分配,因此应将其声明为 NSArray? 或类似 [Event] 的内容?。此外,在 eventItems 之后使用 ! 会使您面临严重的崩溃风险;永远不要使用 ! 除非你绝对确定你不会意外地得到一个 nil 值。

关于swift - CoreData/TableView - 'subscript' 的使用不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39148813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com