दस्तावेज़ सही हैं, लेकिन बहुत अपूर्ण हैं। यहां क्या हो रहा है। यदि कोई वेब व्यू राज्य बहाली में भाग लेता है (मुझे लगता है कि आप जानते हैं कि इसका क्या अर्थ है - सब कुछ restorationIdentifier
होना चाहिए, और इसी तरह), और यदि उपयोगकर्ता के पास कोई अनुरोध था (HTML स्ट्रिंग नहीं) तो जब उपयोगकर्ता ने छोड़ा ऐप, वेब व्यू स्वचालित रूप से उसी प्रतिक्रिया वाले जीवन में वापस आ जाएगा, जिसकी request
संपत्ति है, और इसकी बैक और फॉरवर्ड सूचियां बरकरार हैं। इस प्रकार, आप वेब दृश्य की स्थिति को पुनर्स्थापित करने के लिए राज्य बहाली तंत्र का उपयोग कर सकते हैं, लेकिन आपको थोड़ा अतिरिक्त नृत्य करना होगा। यह नृत्य इतना उत्सुक और अस्पष्ट है कि शुरुआत में मैं इस धारणा के तहत था कि दस्तावेज़ के दावे के बावजूद वेब दृश्य का राज्य वास्तव में सहेजा और बहाल नहीं किया जा सका।
यहां दो रहस्य हैं; एक बार जब आप उन्हें जानते हैं, तो आप वेब व्यू स्टेट बहाली को समझेंगे:
एक पुनर्स्थापित वेब दृश्य स्वचालित रूप से इसके अनुरोध को लोड नहीं करेगा; यह आपके कोड पर निर्भर है।
एक पुनर्स्थापित वेब दृश्य के बाद अपना अनुरोध लोड हो गया है, इसकी पिछली सूची में पहली वस्तु उस उपयोगकर्ता में एक ही पृष्ठ है जिसे उपयोगकर्ता ने छोड़ा (स्क्रॉल और ज़ूम)।
यह जानकर, आप वेब दृश्य राज्य बहाली के लिए आसानी से रणनीति तैयार कर सकते हैं। पहली बात का पता लगाने है कि हम राज्य को बहाल कर रहे हैं, और कहा कि इसलिए कहते हैं एक झंडा उठाने के लिए है:
-(void)decodeRestorableStateWithCoder:(NSCoder *)coder {
[super decodeRestorableStateWithCoder:coder];
self->_didDecode = YES;
}
अब हम पता लगा सकते हैं (viewDidAppear:
में शायद) है कि हम राज्य को बहाल कर रहे हैं, और वेब दृश्य जादुई होता है अनुरोध करें, और उस अनुरोध को लोड करें:
if (self->_didDecode && wv.request)
[wv loadRequest:wv.request];
अब मुश्किल भाग के लिए। दृश्य भार के बाद, हम तुरंत "वापस जाओ।" इसका वास्तव में उपयोगकर्ता की पिछली स्क्रॉल स्थिति को पुनर्स्थापित करने का प्रभाव है (और बैक स्टैक के शीर्ष से अतिरिक्त प्रविष्टि को हटाने का)। तो फिर हम अपने ध्वज को कम इसलिए है कि हम किसी अन्य समय में इस अतिरिक्त कदम नहीं है:
- (void)webViewDidFinishLoad:(UIWebView *)wv {
if (self->_didDecode && wv.canGoBack)
[wv goBack];
self->_didDecode = NO;
}
UIWebView राज्य यह उपयोगकर्ता पहले से एप्लिकेशन छोड़ दिया जब में था में है। हमने अंतर्निहित आईओएस 6 राज्य की बचत और बहाली सुविधा का उपयोग कर राज्य को सहेजा और बहाल कर दिया है।
यह मेरे उत्तर से बेहतर है! – matt
हर किसी को यह समझने के लिए मैट का जवाब पढ़ना चाहिए कि कोड क्या चल रहा है और जहां कोड दिखाया गया है। बस "रीलोड" के साथ अपने "loadRequest" कॉल को प्रतिस्थापित करें। – jasonjwwilliams