[解決済み]復元状態プロトコルを使用して、コードでプログラムでビルドされたものを取得しようとしましたが、構文は良好ですが動作しないようです。 私のコードでUIButtonを開発しましたが、UIImageViewをクリックするとそれが作成されますが、アプリケーションを終了して戻ってくるとUIImageViewはもう作成されません。ここで コードです:iOSの復元状態
class ScrollViewController: UIViewController, UIScrollViewDelegate {
var x1 = 200
var testpost = UIImageView()
override func viewDidLoad() {
super.viewDidLoad()
let addButton = UIButton(frame: CGRect(x: 10, y: 20, width: 100, height: 40))
addButton.backgroundColor = .black
addButton.setTitle("add a note", for: .normal)
addButton.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
self.view.addSubview(addButton)
}
func buttonAction(sender: UIButton!) {
x1 = x1 + 30
testpost = UIImageView(frame:CGRect(x: x1,y: 0,width: 240,height: 240))
testpost.image = UIImage(named:"Screenshots 2017-04-18 at 19.41.04")
view.addSubview(testpost)
testpost.restorationIdentifier = "testpostId"
}
override func encodeRestorableState(with coder: NSCoder) {
if let imagge = testpost.image {
coder.encode(UIImagePNGRepresentation(imagge), forKey: "testpostId")
}
super.encodeRestorableState(with: coder)
}
override func decodeRestorableState(with coder: NSCoder) {
if let imagge2 = coder.decodeObject(forKey: "testpostId") as? Data {
testpost.image = UIImage(data: imagge2)
super.decodeRestorableState(with: coder)
}}}
私はそれを殺した後、アプリを起動すると、それが終了する前に同じ位置にあった、しかし私は、スクロールビューを試してみました、それがうまく動作します。
は、私はまた、AppDelegateでこれを追加しました:
func application(_ application: UIApplication, shouldSaveApplicationState coder: NSCoder) -> Bool {
return true
}
func application(_ application: UIApplication, shouldRestoreApplicationState coder: NSCoder) -> Bool {
return true
}
は私が直接、絵コンテから、また私のビューコントローラに復元同上を与えました。 私はエラーはありませんが、何も保存されていません。私の間違いはどこですか? ありがとうございます!
ソリューション、追加:
super.decodeRestorableState(with: coder)
後
testpost.frame = CGRect(x: x1,y: 0,width: 240,height: 240)
view.addSubview(testpost)
をそして、それは動作します:)コメントから、あなたの助け
関数decodeRestorableStateはこれまでに呼び出されていますか?それは画像のデータを検索し、そのデータは妥当であるかどうか? –
'encodeRestorableState'と' decodeRestorableState'が呼び出されるようにブレークポイントを追加しましたか?そうであれば、イメージを 'testpost'に割り当てても、実際には復元中に画面に追加することはありません。 –
@ScottThompson実際に呼び出されたかどうかはどうすればわかりますか? 私は2つの関数shouldSaveとshouldRestoreを追加すれば十分だろうと思いましたか? また、私のアプリはデータを保存しているようです。私のアプリを起動すると、ちょっとだけ終了する前の状態に正確に戻ってしまいます。それが消えて、起動時の状態に戻ります。最初のアプリ(その明確でない場合私に教えてください) – VH24