Ich arbeite an einem Projekt für iOS in Swift. Diese App beinhaltet die Anzeige von JSON-Daten in einem UITableView.Swift - UITableView 'kann eine Zelle mit dem Bezeichner Cell'
Ich habe die JSON-Daten analysiert und alles, aber es wird nicht in der Tabellenansicht angezeigt. Wann immer ich meine app laufen sie mir diesen Fehler gibt:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier Cell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'
Ich versuche, alles zu tun, programmatisch stattdessen die Storyboards zu verwenden. Ich werde meinen Code unten hinzufügen.
import UIKit
import Foundation
class TableViewController: UITableViewController
{
var postsCollection = [Post]()
var service: PostService!
override func awakeFromNib()
{
super.awakeFromNib()
}
override func viewDidLoad()
{
super.viewDidLoad()
service = PostService()
service.getPosts
{
(response) in
self.loadPosts(response["Events"]! as! NSArray)
}
}
func loadPosts(events: NSArray)
{
for event in events
{
//var event = event["Events"]! as! NSDictionary
print("\n-----------------------------------------------------")
print(" RECEIVED_JSON_DATA")
print("-----------------------------------------------------")
print("Title : \(event["Title"])")
print("Event Description : \(event["EventDescription"])")
print("Event Location : \(event["EventLocation"])")
print("Event StartTime : \(event["EventStartTime"])")
print("Event EndTime : \(event["EventEndTime"])")
print("RowKey : \(event["RowKey"])")
print("-----------------------------------------------------\n")
var title = event["Title"]! as! String
var description = event["EventDescription"]! as! String
var location = event["EventLocation"]! as! String
var startTime = event["EventStartTime"]! as! String
var endTime = event["EventEndTime"]! as! String
//var eventURL = event["EventURL"]! as! String
var rowKey = event["RowKey"]! as! String
//var postObj = Post(title: title, description: description, location: location, startTime: startTime, endTime: endTime, eventURL: eventURL, rowKey: rowKey)
var postObj = Post(title: title, description: description, location: location, startTime: startTime, endTime: endTime, rowKey: rowKey)
postsCollection.append(postObj)
}
dispatch_async(dispatch_get_main_queue())
{
self.tableView.reloadData()
}
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// TableView
override func numberOfSectionsInTableView(tableView: UITableView) -> Int
{
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return postsCollection.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell
let object = postsCollection[indexPath.row]
cell.textLabel!.text = object.title
return cell
}
override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool
{
// Return false if you do not want the specified item to be editable.
return true
}
}
Kann mir jemand dabei helfen und mir zeigen, wo ich falsch liege?
Danke!
Wie ich schon sagte, versuche Im alles zu tun programmatisch statt Storyboards verwenden. Gibt es eine andere Möglichkeit, ohne Storyboards oder Xib zu verwenden? – ADuggan
Tatsächlich teilt Ihnen die Fehlermeldung mit, was zu tun ist: *** muss ** eine Feder oder ** eine Klasse für den Bezeichner *** registrieren – vadian
Wenn der Zellprototyp nicht zu dem _tableView_- oder _collectionView-Ausgang in IB hinzugefügt wird. One ** muss ** die Zelle Nib vor dem Entfernen der Warteschlange registrieren :) –