2009-11-28 16 views
11

Sekme çubuğu ve gezinme denetleyicileri olan bir iPhone uygulaması geliştirdim.Uygulamayı sonlandırmadan önce iPhone uygulama durumu nasıl korunur?

Şu an için çalışıyor.

Artık uygulamanın çıkmadan önce durumunu kaydetmesini istiyorum.

6 sekme kullandığımı varsayalım ve gelen bir çağrı geldiğinde, uygulamayı yeniden başlattıktan sonra en son seçilen sekmeyi seçmeliyim.

Ben bu konuyla ilgili çeşitli sorular gördük ama

kimse bana bunun için düz bir yol söyleyebilir, onları gördükten sonra daha karıştı?

cevap

27

"Tek bir beden herkese uyar", bu sorunun tam cevabı yok - uygulama durumunun uygulanması, uygulamanın yapısına büyük ölçüde bağlı olacak, böylece tek bir çözümün, özel durumunuza sığması olası değildir. Genellikle applicationWillTerminate: devleti kurtarmak için herhangi işlemleri gerçekleştirmek isteyecektir

  1. :

    iyi halini geliştirmek için doğru yolda koruyarak çözüm koymak gerektiğini, ancak, bazı genel ipuçları ve işaretçileri vardır app delegate veya diğer sınıflarda dinleyerek. tercihi veya diğer bilgilere ilişkin

  2. Look at NSUserDefaults. (Eğer NSUserDefaults içinde NSCoding sadece mağaza nesneleri uygulamak anlamına olsa bir NSDictionary benzer) Anahtar/değer çiftlerini depolamak için NSUserDefaults kullanabilirsiniz. Durum bilgilerini depolamak için NSUserDefaults kullanın. Bir uyarı - büyük miktarlarda veri depolamak için NSUserDefaults kullanmamalısınız, çünkü bu, uygulamanızın başlatma süresini yavaşlatır (değerler başlatma sırasında yüklenir).

  3. Durumunuza daha açık ... Tek yapmanız gereken, uygulama arasında seçilen sekmeyi korumaksa, applicationWillTerminate: uygulamalısınız ve seçilen sekme dizinini saklamak için NSUserDefaults kullanmalısınız. Ardından, applicationDidFinishLaunching: uygulamanızda, bu NSUserDefaults anahtarının varlığını denetler ve varsa UITabBarController'ın seçili dizinini depolanan değere ayarlarsınız.

  4. Örneğin, seçilen sekmenin gezinme yığınını da geri yüklemek isterseniz, bu durumda, gezinti yığınının doğru şekilde yeniden oluşturulabilmesi için yeterli miktarda bilgi depolamanız gerekir. NSUserDefaults'ta saklamanız gereken, genel olarak, uygulamanızın yapısına ve gezinme yığınındaki görünüm denetleyicisi sıradüzeninin olası yinelemelerine özgü olduğu için nicel olarak ölçmek zordur.

  5. uygulamanın kapalıyken kaybolmuş istemiyorum muhtemelen Girilen kullanıcı verileri dahil daha genel bir navigasyon yığını, geri gerekiyorsa (örneğin, kullanıcı bir tür yeni bir rekor oluşturuyor sanki) Uygulama odak noktasını uygulama temsilcisi düzeyinde depolamaya odaklanmanızı öneriyor ve bunun yerine görünüm denetleyici sınıflarınızın dinlemesine ve kendi özel durum tasarruflarını yapmasına odaklanmanızı öneririz. Ayrıca, gezinme hiyerarşisini geri yüklemek için sonlandırmada görüntü denetleyicisi başına kaydedilen bilgileri kullanmak için bazı mekanizmaları da belirlemeniz gerekir. Bu, ihtiyaçlarınıza bağlı olarak gerekli olmayan daha karmaşık bir tekniktir.Ben belirtildiği gibi konu Başvurunuz yapısına kadar ağır bağlı olduğundan bu soru için genel bir çözüm yoktur çünkü

Ne yazık ki bu cevap, özellikle daha genel ve karmaşık durumlar için, biraz belirsiz olduğunu. http://robertcarlsen.net/2009/06/19/overly-simplistic-saving-state-in-of-for-iphone-847

+0

Eğer – harshalb

+0

5. doğrusu ben vermek istiyorum türden bir şey olduğu herhangi bir örnek veya öğretici bağlantıyı sağlayabilir:

İşte kullanarak NSUserDefaults bir örnek. Benim durumumda, Çekirdek Verileri kullanıyorum. VC yığınının tabanında, mevcut bir "root" yönetilen nesneyi seçebilir veya yeni bir tane oluşturabilirsiniz. Bu nesne daha sonra düzenleme için sonraki VC'ye aktarılır. Dahası, nitelikler daha sonra seçilebilir/düzenlenebilir, bu nedenle devam eden bir önkoşul vardır. Seçimi en üstte kaydedebildiğimden (siparişler arasında sıralama değişmeyecek), "yığını" aşağıdan yukarıya doğru yürümeye ve yeniden oluşturmaya ihtiyacım var. Burada gerçekten NSCoding kullanmalıyım gibi hissediyorum, ama bu tür bir restorasyon ile olası görünüyor. Hmm. –

+0

Bu kitaplık yararlı görünüyor: https://github.com/enormego/EGOViewStackPersistence – pix0r

İlgili konular