gpt4 book ai didi

ios - 预期返回 'UITableViewCell' 的函数中缺少返回值

转载 作者:行者123 更新时间:2023-11-30 13:05:31 25 4
gpt4 key购买 nike

SO中可能有类似的问题,但没有人帮助我实现我的结果,因此最终在这里问。

场景

我有一个 ViewController(HomeViewController)。在我的 HomeController 中,我有一个 subview ,里面有一个 TableView 。该 subview 部分可见,用户可以将其平移以显示 Tableview 数据。表格 View 将显示消息、照片、注释和事件等通知。我的应用程序是一个仅限群聊的应用程序。因此,这些消息、照片、注释和事件将基于组显示。一组将仅显示 25 条消息、8 张照片、2 条注释和 1 条事件详细信息。从显示消息开始,我创建了一个 TableviewCell 并将其注册到 HomeViewController 内的 Tableview,如下所示

var notifications : NotificationsView!
notifications.frame = CGRectMake(0, -self.view.frame.height + 175, self.view.frame.size.width, self.view.frame.size.height)
notifications._tableview.dataSource = self
notifications._tableview.delegate = self
notifications._tableview.registerNib(UINib(nibName: "TimelineCell", bundle: nil), forCellReuseIdentifier: "timelinecell")
notifications._tableview.registerNib(UINib(nibName: "PhotosCell", bundle: nil), forCellReuseIdentifier: "photos")
notifications._tableview.registerNib(UINib(nibName: "NotesCell", bundle: nil), forCellReuseIdentifier: "notes")
notifications._tableview.registerNib(UINib(nibName: "CalendarCell", bundle: nil), forCellReuseIdentifier: "calendar")

我的模型类看起来像这样

class TimelineModal : Object {
dynamic var groupID = ""
dynamic var groupName = ""
let messages = List<TimelineGroupMessages>()
let photos = List<TimelineGroupPhotos>()
let notes = List<TimelineGroupNotes>()
let calendarDetails = List<TimelineGroupCalendar>()

override class func primaryKey() -> String? { return "groupID" }

}

class TimelineGroupMessages : Object {

dynamic var message = ""
dynamic var userName = ""
dynamic var messagetype = ""
}

class TimelineGroupPhotos : Object {

dynamic var photo = ""
}

class TimelineGroupNotes : Object {

dynamic var noteTitle = ""

}

class TimelineGroupCalendar : Object {

dynamic var calendarEventDate = ""
dynamic var calendarEventTitle = ""

}

Tableview 内的数据将采用这样的方式:每个组的 Messages(25) 首先显示,然后是 Photos(8),然后是 Notes (2),最后是 Event (1),并且再次为另一组显示相同格式的数据。

为了显示数据,从 Realm 中获取的数据是在 viewWillAppear()

上获取的
 private var numberofRowsforTimeline : Int = 0
private var realmdata : Results<TimelineModal>!
private var groupsCount : Int = 0
private var messagesCount : Int = 0
private var photosCount : Int = 0
private var notesCount : Int = 0
private var eventsCount : Int = 0

private func LoadDatafromRealm()
{
let realm = try! Realm()
let realmDbData = realm.objects(TimelineModal)
print("Data : \(realmDbData)")
groupsCount = realmDbData.count
let messages_Count : Int = Int(realm.objects(TimelineGroupMessages).count)
let photos_Count : Int = Int(realm.objects(TimelineGroupPhotos).count)
let notes_Count : Int = Int(realm.objects(TimelineGroupNotes).count)
let events_Count : Int = Int(realm.objects(TimelineGroupCalendar).count)
self.realmdata = realmDbData

numberofRowsforTimeline += messages_Count + photos_Count + notes_Count + events_Count

}

这是我收到提到的错误的代码

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return numberofRowsforTimeline
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

var cell : UITableViewCell!
// let cellMessages : TimelineCell = tableView.dequeueReusableCellWithIdentifier("timelinecell", forIndexPath: indexPath) as! TimelineCell
//let cellPhotos : PhotosCell = tableView.dequeueReusableCellWithIdentifier("photos", forIndexPath: indexPath) as! PhotosCell
//let cellNotes : NotesCell = tableView.dequeueReusableCellWithIdentifier("notes", forIndexPath: indexPath) as! NotesCell
//let cellCalendar : CalendarCell = tableView.dequeueReusableCellWithIdentifier("calendar", forIndexPath: indexPath) as! CalendarCell

for __data in self.realmdata
{
if __data.messages.count > 0
{
let cellMessages : TimelineCell = tableView.dequeueReusableCellWithIdentifier("timelinecell", forIndexPath: indexPath) as! TimelineCell

for x in 0..<__data.messages.count - 1
{
cellMessages.topConstraintforgroupNameLabel.constant = heightConstraints.topConstraintForRowZero.rawValue
cellMessages.topConstraintfortabNameLabel.constant = heightConstraints.topConstraintForRowZero.rawValue
cellMessages.lblGroupID.text = __data.groupID
cellMessages.lblGroupID.hidden = true
cellMessages.lblGroupName.text = __data.groupName
cellMessages.lblmessage.text = __data.messages[x].message
return cellMessages
}

}
else if __data.photos.count > 0
{
let cellPhotos : PhotosCell = tableView.dequeueReusableCellWithIdentifier("photos", forIndexPath: indexPath) as! PhotosCell

for p in 0..<__data.photos.count - 1
{
cellPhotos.imgPhoto1_photos.image = UIImage(imageLiteral: __data.photos[p].photo)
return cellPhotos
}
}
else if __data.notes.count > 0
{
let cellNotes : NotesCell = tableView.dequeueReusableCellWithIdentifier("notes", forIndexPath: indexPath) as! NotesCell

for n in 0..<__data.notes.count - 1
{
cellNotes.lblNoteName1.text = __data.notes[n].noteTitle
return cellNotes
}
}
else if __data.calendarDetails.count > 0
{
let cellCalendar : CalendarCell = tableView.dequeueReusableCellWithIdentifier("calendar", forIndexPath: indexPath) as! CalendarCell
for c in 0..<__data.calendarDetails.count - 1
{
cellCalendar.lblEventName1.text = __data.calendarDetails[c].calendarEventTitle
return cellCalendar
}

}
else
{
return cell

}
}
} //-> Error Mssing return in a function expected to return 'UITableViewCell'

我哪里出错了?抱歉,如果我的问题太广泛了。只是想确保您了解我的需要。就是这样。帮助!帮助!救命!

注意:我尝试以不同的方式返回单元格,其中没有发生提到的错误,但 Tableview 的所有单元格都有相同的数据。

最佳答案

我认为您误解了如何使用 tableView 委托(delegate)和数据源方法来构建 tableView。特别是,cellForRowAtIndexPath 方法会被多次调用,每要显示的行一次。 indexPath 参数告诉您需要哪个部分/行。无需循环数据 - 只需使用 indexPath 来选择数组中的正确元素。无论如何,循环都是徒劳的,因为第一次执行 return 语句时,整个函数就会终止 - 循环将不会进行到下一次迭代。

例如,以下内容应生成一个表格,其中每个组都有一个部分,每个部分中的行用于消息、照片、注释和事件:

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return self.groupsCount // separate section for each Group
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// locate the correct Group for the given section
let __data = self.realmdata[section]
// the total number of rows for this section (ie Group) is:
// number of messages + number of photos + number of notes + number of events:
return __data.messages.count + __data.photos.count + __data.notes.count + __data.calendarDetails.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// locate the correct Group for the given section (using the indexPath)
let __data = self.realmdata[indexPath.section]
if (indexPath.row < __data.messages.count) { // first rows are the messages
// use the indexPath.row to get the required index for the messages:
let messageIndex = indexPath.row
let cellMessages : TimelineCell = tableView.dequeueReusableCellWithIdentifier("timelinecell", forIndexPath: indexPath) as! TimelineCell
cellMessages.topConstraintforgroupNameLabel.constant = heightConstraints.topConstraintForRowZero.rawValue
cellMessages.topConstraintfortabNameLabel.constant = heightConstraints.topConstraintForRowZero.rawValue
cellMessages.lblGroupID.text = __data.groupID
cellMessages.lblGroupID.hidden = true
cellMessages.lblGroupName.text = __data.groupName
// use the index to locate the correct message text:
cellMessages.lblmessage.text = __data.messages[messageIndex].message
return cellMessages
} else if (indexPath.row < __data.messages.count + __data.photos.count) { // next are the photos
// use the indexPath.row (adjusted to account for the messages rows) to get the required index for the photos:
let photoIndex = indexPath.row - __data.messages.count
let cellPhotos : PhotosCell = tableView.dequeueReusableCellWithIdentifier("photos", forIndexPath: indexPath) as! PhotosCell
cellPhotos.imgPhoto1_photos.image = UIImage(imageLiteral: __data.photos[photoIndex].photo)
return cellPhotos
} else if (indexPath.row < __data.messages.count + __data.photos.count + __data.notes.count) { // next are the notes
let noteIndex = indexPath.row - __data.messages.count - __data.photos.count
let cellNotes : NotesCell = tableView.dequeueReusableCellWithIdentifier("notes", forIndexPath: indexPath) as! NotesCell
cellNotes.lblNoteName1.text = __data.notes[noteIndex].noteTitle
return cellNotes
} else { // next are the Events
let eventIndex = indexPath.row - __data.messages.count - __data.photos.count - __data.notes.count
let cellCalendar : CalendarCell = tableView.dequeueReusableCellWithIdentifier("calendar", forIndexPath: indexPath) as! CalendarCell
cellCalendar.lblEventName1.text = __data.calendarDetails[eventIndex].calendarEventTitle
return cellCalendar
}
}

关于ios - 预期返回 'UITableViewCell' 的函数中缺少返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39423289/

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