我有一个令人困惑的问题,我希望有人可以给我一些解决方法的见解或指导。
我的应用非常简单。它是UISwitches和标签的一系列视图,用作为客户选择一组产品的指导性访谈。最后,它将所有变量存储在一个类中,并使用它们来构建PDF提议。
一切都很好,除了罕见的场合。对于使用该应用程序的人,我已经出现过两次,当他们转到之前的屏幕时,它无法在视图中设置UISwitch元素。再玩一点,然后开始按预期行事。
我知道变量仍然存储正确,因为如果你在展示这种行为的同时生成PDF,那么所有的内容都会出现,那些先前的答案应该生成。
所有变量都存储在一个实例为newTracker的类中:
<script src="http://d3js.org/d3.v3.min.js"></script>
<script>
// set the dimensions of the canvas
var margin = { top: 20, right: 20, bottom: 70, left: 40 },
width = 1000 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
// set the ranges
var x0 = d3.scale.ordinal().rangeRoundBands([0, width], .05);
var x1 = d3.scale.ordinal();
var xl = d3.scale.linear().range([0,width]);
var y = d3.scale.linear().range([height, 0]);
var z = d3.scale.ordinal().range(["#0b4a72", "#ad1a2c", "#7aa74d"]);
// define the axis
var xAxis = d3.svg.axis()
.scale(x0)
.orient("bottom")
var yAxis = d3.svg.axis()
.scale(y)
.orient("left")
.ticks(10);
// add the SVG element
var svg = d3.select("body").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform",
"translate(" + margin.left + "," + margin.top + ")");
// load the data
d3.json("http://lrssrs/LRCS/EmpHours/GraphData", function (error, data) {
var seriesNames = d3.keys(data[0]).filter(function (key) { return (key !== "SORT_NAME") && (key !== "Year") && (key !== "Month") && (key !== "MonthName"); });
data.forEach(function (d) { d.Hours = seriesNames.map(function (name) { return { name: name, value: +d[name] }; }); });
// scale the range of the data
x0.domain(data.map(function (d) { return d.MonthName + " " + d.Year; }));
x1.domain(seriesNames).rangeRoundBands([0, x0.rangeBand()]);
xl.domain(data.map(function (d) { return d.MonthName + " " + d.Year; }));
y.domain([0, (10 + d3.max(data, function (d) { return d3.max(d.Hours, function (d) { return d.value; }); }))]);
var line = d3.svg.line()
.x(function (d) {
return xl(d.Available);
})
.y(function (d) {
return y(d.Service / d.Timesheet);
});
svg.append("path")
.attr("d", line(data));
// add axis
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis)
.selectAll("text")
.style("text-anchor", "end")
.attr("dx", "-.8em")
.attr("dy", "-.55em")
.attr("transform", "rotate(-90)");
svg.append("g")
.attr("class", "y axis")
.call(yAxis)
.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 5)
.attr("dy", ".71em")
.style("text-anchor", "end")
.text("Hours");
var state = svg.selectAll(".state")
.data(data)
.enter().append("g")
.attr("class", "g")
.attr("transform", function (d) { return "translate(" + x0(d.MonthName + " " + d.Year) + ",0)"; });
// Add bar chart
state.selectAll("bar")
.data(function (d) { return d.Hours; })
.enter().append("rect")
.attr("class", "bar")
.attr("x", function (d) { return x1(d.name); })
.attr("width", x1.rangeBand())
.attr("y", function (d) { return y(d.value); })
.attr("height", function (d) { return height - y(d.value); })
.style("fill", function (d) { return z(d.name); });
state.selectAll("text")
.data(function (d) { return d.Hours; })
.enter().append("text")
.text(function (d) { return d.value; })
.attr("width", x1.rangeBand())
.attr("x", function (d) { return x1(d.name) + (x1.rangeBand() / 2); })
.attr("y", function (d) { return y(d.value) + 20; })
.attr("text-anchor", "middle")
.attr("font-family", "sans-serif")
.attr("font-size", "11px")
.attr("fill", "white");
var legend = svg.selectAll(".legend")
.data(seriesNames.slice().reverse())
.enter().append("g")
.attr("class", "legend")
.attr("transform", function (d, i) { return "translate(0," + (i * 20) + ")"; });
legend.append("rect")
.attr("x", width - 18)
.attr("width", 18)
.attr("height", 18)
.style("fill", z);
legend.append("text")
.attr("x", width - 24)
.attr("y", 9)
.attr("dy", ".35em")
.style("text-anchor", "end")
.text(function (d) { return d; })
.on("click", function (d) { alert(d); });
});
</script>
网点看起来像:
class AnswerTracker: NSObject {
var someVariable1: Bool = false
var someVariable2: Bool = false
...
设置这些开关是在viewDidLoad()中完成的,如下所示:
@IBOutlet weak var outSomeSwitch1: UISwitch!
@IBOutlet weak var outSomeSwitch2: UISwitch!
任何人都可以想到为什么这会随机不的功能?它的第一个实例是具有最新操作系统的iPhone 6s,第二个实例是最新操作系统的7。其他应用程序都没有在后台运行。我把手放在他们身上,但是他们没有挂进我的开发机器,所以我无法查看正在发生的事情,我无法在4,5,5s,7上复制结果,或者我用于测试的iPad Air 2.
在我的情况下唯一另一件奇怪的事情是,有时 Back 或 Next 按钮可能不是拖累和放置。下降segue。有时他们可以使用一些代码来决定接下来要加载哪个屏幕,或应该之前的哪个屏幕。
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
if newTracker.someVariable1 {
outSomeSwtich1.setOn(true, animated: true)
}
if newTracker.someVariable2 {
outSomeSwitch2.setOn(true, animated: true)
}
}
问题可能会以加载视图的方式存在吗?
感谢任何见解。
答案 0 :(得分:1)
viewDidLoad()
一次来设置视图。如果您想在视图显示时更新用户界面,请稍后转到其他视图,您应该使用viewDidAppear
或viewWillAppear()
。
override func viewWillAppear() {
super.viewWillAppear()
outSomeSwitch1.setOn(newTracker.someVariable1, animated: true)
outSomeSwitch2.setOn(newTracker.someVariable2, animated: true)
}