【问题标题】:Swift and Parse nil on prepareforsegueSwift 和 Parse 在 prepareforsegue 上为零
【发布时间】:2015-04-29 22:44:01
【问题描述】:

我正在使用 Parse 中的数组编写表视图控制器。我需要通过 segue 发送数据,但我不知道为什么它总是返回 nil。我将不得不发送图像和文本,但现在我只是将标签 title1 中的文本插入到名为 example 的变量类型 String 中。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "toDetail" {

        var detailScene = segue.destinationViewController as! detailViewController

        let cell = sender as! UITableViewCell
        let indexPath = tableView?.indexPathForCell(cell)

        detailScene.example = self.timelineData[indexPath!.row].title1?.text
    }

}

对于我使用过的数组:

var timelineData : NSMutableArray = NSMutableArray()

还有函数loaddata,与函数viewDidAppear一起使用

func loaddata () {
    timelineData.removeAllObjects()

    var findTimelineData:PFQuery = PFQuery(className: "ii")

    findTimelineData.findObjectsInBackgroundWithBlock{
        (objects, error)->Void in

        if error == nil{
            for object in objects!{
                let ii:PFObject = object as! PFObject
                self.timelineData.addObject(ii)
            }
            let array:NSArray = self.timelineData.reverseObjectEnumerator().allObjects
            self.timelineData = NSMutableArray(array: array)
            self.tableView.reloadData()
        }
    }
}

【问题讨论】:

  • 请分享self.timelineData初始化和填充数据的代码。

标签: ios swift parse-platform tableview


【解决方案1】:

试试这个。它至少应该使您能够从正确的单元格中获取信息。我假设您的时间线数据数组中充满了文本,所以我就是通过将其转换为字符串来访问它的。如果它充满了不同类型的对象,则需要进行不同的投射。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "toDetail" {
        if let detailScene = segue.destinationViewController as? detailViewController {
            if let indexPath = tableView.indexPathForSelectedRow()?.row {
                var object = self.timelineData[indexPath] as! PFObject
                var title = object["title"] as! String
                detailScene.example = title
            }
        }
    }

}

【讨论】:

  • 在这种情况下,错误是:表达式类型在没有更多上下文的情况下不明确因为detailScene.example.text
  • 好的,你的timelineData 数组中有哪些对象?它们是字符串吗?整数?一类?另外,示例是 UILabel 吗?还是变量?
  • 该数组包含一个包含多个列的类:Objectid(String)、Title(String)、Author(Pointer_User)、Sights(Int) 等等……这就是我调用标题的原因
  • 类名是什么?
  • 看看我更新的答案。您首先必须从表格单元格中获取课程,然后通过 myClass["title"] 获取您的标题。您的班级是一本字典,因此您可以通过调用班级的“标题”键来访问标题值。将 CustomClass 替换为您尝试访问的类对象的名称。
【解决方案2】:

可能是 indexPathForCell 的返回值返回 nil 或错误值。关于这个功能不可靠的文章很多。

一个常见的建议是改用indexPathForRowAtPoint(cell.center)

【讨论】:

    【解决方案3】:

    你的最后一行代码肯定有问题:

    detailScene.example = self.timelineData[indexPath!.row].title1?.text
    

    我假设 self.timelineData 数组包含一些数据。
    如果您的数组包含 String 类,则无需附加 .title1?.text 部分。
    如果您的数组包含UILabel 类,则需要将行更改为

    detailScene.example = self.timelineData[indexPath!.row].text
    

    因为UILabel 没有名为title1 的属性。

    一般来说,我认为这是因为 self.timelineData 数组中的类没有名为 title1 的属性。

    【讨论】:

    • 该数组包含一个包含几列的类:Objectid(String)、Title(String)、Author(Pointer_User)、Sights(Int) 等等…… 这就是为什么我尝试调用标题。
    • 但是你为什么打电话给title1?你的班级有这样的属性吗?
    • Title1 是 UILabel 变量的名称(包含在单元格中),它正在从数据库接收标题。
    • UILabel 没有名为 title1 的属性。您是否使用自定义属性对其进行了扩展?您是否尝试过使用detailScene.example = self.timelineData[indexPath!.row].title。请提供用于创建和初始化 self.timelineData 数组和它所拥有的类的代码。
    • 不,我没有使用自定义属性。使用detailScene.example = self.timelineData[indexPath!.row].title 会返回致命错误:打开可选值时意外发现 nil。该数组工作正常,因为正在完美加载每个单元格。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多