数组不存储值

Posted

技术标签:

【中文标题】数组不存储值【英文标题】:Array not storing values 【发布时间】:2016-08-21 04:28:57 【问题描述】:

我从解析后端获取值并使用它们创建一个数组,但没有任何内容存储在其中。有人可以告诉我我做错了什么吗?行: let dataEntry = ChartDataEntry(value: values[i], xIndex: i) 回馈“索引超出范围”

    var fattyArray: [Double] = []

override func viewDidLoad() 
    super.viewDidLoad()

    let innerQuery = PFUser.query()
    innerQuery!.whereKey("objectId", equalTo: "VTieywDsZj")
    let query = PFQuery(className: "BodyFat")
    query.whereKey("UserID", matchesQuery: innerQuery!)
    query.findObjectsInBackgroundWithBlock 
        (percentages: [PFObject]?, error: NSError?) -> Void in
        if error == nil 
            print("Successful, \(percentages!.count) retrieved")
            if let percentage = percentages as [PFObject]! 
                for percentage in percentages! 
                    print(percentage["BodyFatPercentage"])
         self.fattyArray.append(percentage["BodyFatPercentage"].doubleValue)
                    print(self.fattyArray)
                
            
         else 
            print("\(error?.userInfo)")
        
    

    let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
    let unitsSold = fattyArray

    setChart(months, values: unitsSold)



func setChart(dataPoints: [String], values: [Double]) 

    var dataEntries: [ChartDataEntry] = []

    for i in 0..<dataPoints.count 
        let dataEntry = ChartDataEntry(value: values[i], xIndex: i)
        dataEntries.append(dataEntry)
    

【问题讨论】:

【参考方案1】:

这里有两个问题:

    一个问题是findObjectsInBackgroundWithBlock 异步运行,即fattyArray 直到稍后才附加值。您应该将调用 setChart 的代码移动到 findObjectsInBackgroundWithBlock 闭包中。

    query.findObjectsInBackgroundWithBlock  percentages, error in
        if error == nil 
            // build your array like you did in your question
    
            // but when done, call `setChart` here
    
            let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
            let unitsSold = fattyArray
    
            setChart(months, values: unitsSold)
         else 
            print("\(error?.userInfo)")
        
    
    
    // but not here
    
    // let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
    // let unitsSold = fattyArray
    //
    // setChart(months, values: unitsSold)
    

    您的setChart 例程给您一个“索引超出范围”错误,因为您正在遍历dataPoints,但在values 数组中查找值。我在这里看不到任何东西可以保证monthsfattyArray 具有相同数量的条目。

    很明显,如果您修复了第一点,您就有更好的机会让它发挥作用(因为您实际上要等到完全检索数据之后才会生成图表),但我在这里仍然看不到任何东西这保证findObjectsInBackgroundWithBlock 将返回至少六个条目。

【讨论】:

谢谢罗伯!那成功了。问题是,尽管我想在未来的几个月里留下没有价值的东西,以此作为继续取得进步并填写它们的动力。有没有办法做到这一点,还是 ChartDataEntries 必须成对? 我想如果您的图表入口点允许使用可选参数(例如nil 值),那么您似乎可以(a)从数据库中检索数据(大概是成对的日期和值)然后; (b) 手动添加具有日期但没有这些未来日期值的数据点。可能有很多不同的方法来处理这个问题,但从概念上讲,这似乎是可能的。但这似乎超出了这个问题的范围...... 非常感谢您的帮助!所以我有另一个问题,我搜索并找到了一个你评论过的线程,想知道你是否不介意看一下。我还没有 50pt 的声誉,所以我不能评论那个帖子 (***.com/a/28723081/5109162),但我确实在这里开始了另一个 ***.com/questions/39137259/…

以上是关于数组不存储值的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 存储/插入数组值到数据库 Mysql

如何使用数据读取器读取字符串值并将其存储在数组中

如何在一列中存储数组或多个值

如何从另一个数组中的数组中获取数据,该数组在 Java 中存储值?

读取文本文件行并将 x 和 y 值存储在数组中(NodeJS)

将结果存储在数组列表中