Pertanyaan Melestarikan status aplikasi di seluruh restart


Saya sudah mencoba melestarikan keadaan aplikasi iPhone saya dengan serialisasi utama saya UITabBarController menggunakan [NSKeyedArchiver archiveRootObject:toFile:], tapi saya mengalami kesulitan.

Pertama saya punya masalah dengan UIImage, karena tidak mengimplementasikan NSCoding protokol, tetapi saya memecahkannya dengan membuat kategori ekstensi untuk UIImage yang menyimpan dan mengambil data gambar mentah.

Masalah yang saya hadapi sekarang adalah bahwa pengontrol tampilan saya tidak ada ketika saya memulihkan dari arsip. saya sudah UINavigationControllers di masing-masing tab saya, dan ketika saya mengembalikan, UINavigationItems masih ada (saya dapat menggunakan tombol Kembali dan seterusnya untuk mengubahnya) tetapi pengendali tampilan hilang begitu saja.

saya melihat bahwa UINavigationController's viewControllers properti ditandai (nonatomic, copy). Apakah ini berarti bahwa ketika Anda mengarsipkan a UINavigationController, itu tidak termasuk tumpukan pengendali tampilan? Jika demikian, bagaimana saya bisa mengatasi ini? Saya pertama kali berpikir saya akan menimpa NSCoding metode untuk UINavigationController, tetapi ini memecah inisialisasi dari file NIB.

Saya sedikit terganggu karena saya mengalami kesulitan dalam mempertahankan status aplikasi. Saya pikir itu adalah kasus penggunaan cukup umum yang akan mudah diterapkan. Apakah saya kehilangan sesuatu di sini?


5
2017-11-30 22:26


asal


Jawaban:


Atribut pada @property memiliki sedikit atau tidak ada hubungannya dengan perilaku pengarsipan (mereka hanya menggambarkan bagaimana getter dan setter bekerja).

Juga, hanya karena kelas-kelas UI mendukung NSCoding, tidak berarti bahwa itu dapat digunakan untuk merekonstruksi keadaan. Sebagian besar waktu, mereka mendukung NSCoding sehingga mereka dapat dibangun dan dimuat dari file NIB menggunakan Interface Builder. Jika Anda berpikir tentang semua bagian-bagian negara yang Anda miliki tidak bisa diatur dalam Interface Builder - sejumlah fitur ini mungkin tidak didukung oleh implementasi NSCoding kelas.

Biasanya, orang tidak menggunakan NSCoding untuk menyimpan status aplikasi karena sebenarnya apa yang merupakan negara aplikasi khusus untuk aplikasi Anda.

Menyimpan status aplikasi biasanya melibatkan menyimpan nilai sendiri yang memungkinkan Anda membuat ulang status. yaitu menyimpan indeks tab yang dipilih atau serangkaian indeks terpilih yang mewakili jalur yang melewati pengontrol navigasi.


5
2017-11-30 23:23



Mengapa Anda mencoba mengarsipkan seluruh pengontrol tab bar? Cukup gunakan NSUserDefaults dan simpan indeks tab yang dipilih. Kemudian, ketika Anda memuat aplikasi, pilih indeks tab berdasarkan nilai yang disimpan.


5
2017-12-01 01:31



Saya tidak pernah bisa mendapatkan pendekatan ini untuk bekerja baik. Apa yang saya inginkan adalah memiliki protokol saya sendiri, dan memiliki setiap viewcontroller untuk menyelamatkan / mengembalikan metadata yang diperlukan untuk tampilan itu (Anda tidak perlu menyimpan data gambar misalnya, hanya nama gambar). Setelah Anda memilikinya, cukup mudah untuk menulis beberapa kode generik untuk menjalankan pengendali navigasi (+ tumpuk) dan menyimpan / memulihkan seluruh rangkaian data. Kedengarannya seperti banyak pekerjaan, tetapi sebenarnya cukup mudah.


3
2017-11-30 22:41