【发布时间】:2017-10-23 22:08:21
【问题描述】:
我已经在互联网上搜索了无数次,但没有找到解决我的情况的方法。可能是解决方案的东西是我不理解的东西,它们在 Objective-C 中。因此,如果这是重复的,则不是。我未能从其他帖子中获得解决方案。
我正在专门为我的学校制作一个 GPA 计算器,根据我们的学科水平,我们也会获得不同的分数。
我制作了一个带有自定义单元格的 UITableView,该单元格将为年级中的每个科目重复特定次数。
我想知道的是从每个自定义单元格中获取数据(分数和级别)
这是我的故事板:
这是我在模拟器中预览的应用:
我将通过获取每个主题的标签文本来获取分数和级别,但我不知道如何从特定单元格获取数据。
非常感谢。
这是我目前拥有的代码:
//showStepperValueLabel shows the level and showSliderValueLabel shows the score in the cells.
//customCell is my custom class for my custom cell.
//i have already declared the levels and scores array above in my class
func tableView(tableView: UITableView!, didDeselectRowAtIndexPath indexPath: NSIndexPath!) {
let cell = tableView.cellForRowAtIndexPath(indexPath) as customCell
var level: String! = cell.showStepperValueLabel.text
var score: String! = cell.showSliderValueLabel.text
levels[indexPath.row] = level
scores[indexPath.row] = score
}
//yadiyadayada
//and this is the part where the values get received(it's inside the prepareForSegue function)
var engScore: String = scores[0]
var engLevel: String = levels[0]
var mathScore: String = scores[1]
var mathLevel: String = levels[1]
var sciScore: String = scores[2]
var sciLevel: String = levels[2]
var geoScore: String = scores[3]
var geoLevel: String = levels[3]
var hisScore: String = scores[4]
var hisLevel: String = levels[4]
var chiScore: String = scores[5]
var chiLevel: String = levels[5]
//
但我收到一个错误,即数组从未收到值。有人可以帮忙吗?
编辑:
我又遇到了一个错误,所以我尝试在初始化时手动将字符串提供给数组
var levels: [String] = ["H", "H", "H", "H", "H", "H"]
var scores: [String] = ["12", "23", "34", "45", "56", "67"]
该程序运行良好。因此得出结论,问题发生在数组接收字符串的部分
func tableView(tableView: UITableView!, didDeselectRowAtIndexPath indexPath: NSIndexPath!) {
let cell = tableView.cellForRowAtIndexPath(indexPath) as customCell
var level: String! = cell.showStepperValueLabel.text
var score: String! = cell.showSliderValueLabel.text
levels.insert(level, atIndex: indexPath.row)
scores.insert(level, atIndex: indexPath.row)
}
你确定取消选择的方法是正确的吗?互联网上的其他人都教我使用标签,但没有告诉我如何使用它...
EDIT2:
所以我尝试使用标签。 这是我在 tableView 中写的:cellForRowAtIndexPath 函数
cell.showStepperValueLabel.tag = indexPath.row+10
cell.showSliderValueLabel.tag = indexPath.row
这就是我在prepareForSegue中写的
var engScore : UILabel! = self.view.viewWithTag(0) as? UILabel
var mathScore: UILabel! = self.view.viewWithTag(1) as? UILabel
var sciScore: UILabel! = self.view.viewWithTag(2) as? UILabel
var geoScore: UILabel! = self.view.viewWithTag(3) as? UILabel
var hisScore: UILabel! = self.view.viewWithTag(4) as? UILabel
var chiScore: UILabel! = self.view.viewWithTag(5) as? UILabel
var engLevel: UILabel! = self.view.viewWithTag(10) as? UILabel
var mathLevel: UILabel! = self.view.viewWithTag(11) as? UILabel
var sciLevel: UILabel! = self.view.viewWithTag(12) as? UILabel
var geoLevel: UILabel! = self.view.viewWithTag(13) as? UILabel
var hisLevel: UILabel! = self.view.viewWithTag(14) as? UILabel
var chiLevel: UILabel! = self.view.viewWithTag(15) as? UILabel
所以在计算 GPA 的函数中我放了
//Get pxcs
engpxc = engCredits*co.getEnglishPoints(engLevel.text!, engScore: engScore.text!)
mathpxc = mathCredits*co.getNonLanguagePoints(mathLevel.text!, scoreRecieved: mathScore.text!)
geopxc = geoCredits*co.getNonLanguagePoints(geoLevel.text!, scoreRecieved: geoScore.text!)
hispxc = hisCredits*co.getNonLanguagePoints(hisLevel.text!, scoreRecieved: hisScore.text!)
scipxc = sciCredits*co.getNonLanguagePoints(sciLevel.text!, scoreRecieved: sciScore.text!)
chipxc = chiCredits*co.getChiPoints(chiLevel.text!, chiScore: chiScore.text!)
//
现在我收到一个错误提示
致命错误:在展开可选值时意外发现 nil (lldb)
有人可以帮我解决这个问题吗?
EDIT3 - 更多信息:
我在 tableView 中添加了 println:cellForRowAtIndexPath 函数在我给出标签的部分中,发现标签已成功给出并且这些标签收到了我在程序中分配的标签但是当我在 prepareForSegue 函数中使用 println 检查时变量在哪里收到他们的意见,看看他们是否成功收到标签,但我在那里得到“零”。到底是什么问题?
【问题讨论】:
-
我检查了您的编辑,我认为您将值分配给数组索引的方式出错了。首先,你的 levels 数组应该是
NSMutableArray类型。那么你的赋值语句应该变成:levels.insertObject(level, atIndex: indexPath.row) -
不是 NSMutableArray 用于在数组中分配对象吗? level 和 score 是 String 类型,我试图将它们存储到一个数组中,以便它们可以接收下面的数据
-
我收到一个错误,'AnyObject' is not convertible to 'String'
-
我需要查看更多代码来帮助您解决错误。
-
你说得对,
NSMutableArray用于分配对象,甚至您的String类型也是您需要插入到数组中的对象。如果您仍然不确定是否使用NSMutableArray,并且确定您的级别和分数属于String类型,请在答案部分查看我的编辑。尝试以与我相同的方式声明您的数组,并按照我如何将级别和评分String对象分配给它们各自的数组。