【问题标题】:Sorting an array that's filled from CoreData对从 CoreData 填充的数组进行排序
【发布时间】:2015-03-24 18:20:00
【问题描述】:

我有一个文本字段,用户可以在其中输入数值并将它们作为字符串存储到核心数据中。反过来,我正在检索这些值并将它们作为整数存储在一个数组中。我想要做的是按用户存储值的顺序对该数组进行排序,因为我试图绘制这些值以查看它们随时间的趋势。现在,据我所知,这些值正在以完全随机的方式填充我的图表。

var client: Client! = nil
var weights = []

func getWeights() {
        var assessmentWeights: NSSet = client.assessment.valueForKey("weight") as NSSet
        var weightSet: NSSet = assessmentWeights.valueForKey("integerValue") as NSSet
        weights = weightSet.allObjects
        println(weights)
    }

感谢任何帮助! :)

【问题讨论】:

  • 如果你想节省空间并且不关心值之间间隔的大小,也许可以为存储的对象添加一个日期/时间并按此排序......或者一个序列号。
  • 我确实有一个 NSDate 属性与我的重量属性一起存储在对象中,但我不确定如何按该日期排序?
  • date.compareTo(otherDate);

标签: arrays swift core-data jbchartview


【解决方案1】:

如果您已经拥有与每个权重条目关联的时间戳,您可以 (a) 创建一个带有排序描述符的 NSFetchRequest,或者您可以 (b) 对 NSSet 中已有的值进行排序

由于我没有看到太多的代码,这里是选项 (b) 的示例:

var weights = [Int]();
if let entries = client.assessment.allObjects as? [Assessment] {
    let sorted = entries.sorted {
        return $0.timestamp.compare($1.timestamp) == .OrderedAscending
    }
    for assessment in sorted {
        if let intValue = assessment.weight.toInt() {
            weights.append(intValue)
        }
    }
}

return weights

话虽如此,在我看来,最好的选择是将权重值存储为数值,并使用NSFetchRequest(结果类型.DictionaryResultType)和时间戳上的排序描述符来获取您想要的值。

【讨论】:

  • 我知道 NSArray 没有名为 'sort' 的成员
  • client.assessment 是否有 weights 类型的 NSSet? 属性?在没有这么少信息的情况下提供答案有点挑战性。
  • Client有一个Assessment的NSSet,权重是Assessment Entity的一个属性。
  • 好的。体重呢?是什么类型的?
  • 权重由核心数据存储为字符串,然后,根据我的理解(其他人帮助我解决了这个问题),正在将 int 值检索到我的权重数组中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
  • 2013-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多