【发布时间】:2018-04-02 04:35:38
【问题描述】:
我有 2 个视图控制器。 ViewController A 获取信息,ViewController B 使用 Charts 框架在折线图中设置信息。
我这样做是为了在一天结束时更新折线图。这可以正常工作,但是,用户必须打开 ViewController B 才能使用前一天收到的新信息更新折线图。
我怎样才能做到这一点,以便每当应用程序打开时。该图表会自动更新,无需打开 ViewController B。我尝试调用该函数以在 ViewController A 中从 ViewController B 制作图表,但我收到一条错误消息,提示 chart.info 为 nil。
我试图寻找一种方法来做到这一点。但我找不到任何东西。
这里是 ViewController B。它是由 ViewController A 中的一个 segue 打开的:
func makeChart(){
let today = Calendar.current.component(.day, from: Date())
let compare = UserDefaults.standard.integer(forKey: "userDate")
print(today)
print(ViewController.totalReps)
// var points = UserDefaults.standard.array(forKey: "array") as! [Int]
var points: [Int] = []
//Checks if the day passed
if today != compare{
UserDefaults.standard.set(today, forKey: "userDate")
points = UserDefaults.standard.array(forKey: "array") as? [Int] ?? [Int]()
let userReps = UserDefaults.standard.integer(forKey: "userReps")
points.append(userReps)
UserDefaults.standard.set(points, forKey: "array")
//UserDefaults.standard.set(points, forKey: "array")
var chartEntry = [ChartDataEntry]()
print(points)
for i in 0..<points.count {
let value = ChartDataEntry(x: Double(i), y: Double(points[i]))
chartEntry.append(value)
}
let line = LineChartDataSet(values: chartEntry, label: "Reps")
line.colors = [NSUIColor.blue]
let info = LineChartData()
info.addDataSet(line)
Chart.data = info
Chart.chartDescription?.text = "Reps"
//reset values
ViewController.totalReps = 0
UserDefaults.standard.set(0, forKey: "userReps")
}
【问题讨论】:
-
如果您想在 viewController B 中显示图表,那么您可以每次在 viewWillApper 中更新。
-
只需要将数据保存到 userDefaults。
-
您好,viewWillAppear 是在 Viewcontroller A 还是 B 中?
-
你好 @AlexMerlin 每次都保存你在 UserDefaults 中的更改,并且当你在 ViewController B 中打开应用程序时,会自动从用户默认设置图形的值,这样它就会自动反映而无需转到 ViewController B . 或第二种解决方案,如果您的图表数据是静态的,即如果添加后您不需要定期删除它,那么您可以使用 Core Data。
-
不是我说的,将图表的数据存储在一个数组中,然后将该数组存储到 UserDefault 中。使用此 USerDefault 在图表中显示数据,因此,如果在 VC A 中更新数据,它将自动反映到 ViewController B。如果您愿意,我可以编写代码让您将 Array 保存到 UserDefault 然后利用它
标签: swift xcode charts segue viewcontroller