2012-03-13 3 views
32

को पुन: लोड मैं एक दृश्य नियंत्रक में कुछ जानकारी नहीं है (तालिका बार देखा गया) को प्रदर्शित करने की है।एक ViewController

मेरे पास एक दूरस्थ सर्वर पर एक अद्यतन कॉल है जो मेरा डेटा बेस भरता है। अपडेट कॉल होने के बाद मैं अपने व्यू कंट्रोलर को पूरी तरह से पुनः लोड करना चाहता हूं।

मुझे क्या करना चाहिए?

+2

वर्तमान में आप अपना डेटा कैसे अपडेट करते हैं - मुझे लगता है कि आप viewDidAppear का उपयोग कर रहे हैं? – Till

+0

क्या आप अपने व्यू कंट्रोलर को सूचित करने के लिए अधिसूचना केंद्र या प्रोटोकॉल का उपयोग नहीं कर सकते हैं कि अपडेट समाप्त हो गया है? – Khal

+0

@ खल मैंने कभी भी सूचना केंद्र का उपयोग नहीं किया है, क्या आप मुझे ट्यूटोरियल या गाइड पर इंगित कर सकते हैं? @ जब तक मैं 'व्यूविल/डीडएपियर' के साथ-साथ 'लोड व्यू' और 'व्यूडिडलोड' का उपयोग नहीं करता हूं। –

उत्तर

23

आप वास्तव में क्या करने की जरूरत नहीं है:

[self.view setNeedsDisplay]; 

ईमानदारी से, मुझे लगता है कि यह इस मामले में समाधान के सर्वोत्तम "प्रकार की आशा है"

  1. KVO
  2. सूचनाएं
  3. प्रतिनिधिमंडल

हर एक है पक्ष और विपक्ष है: आपके UIView रों अद्यतन करने के लिए कई तरीके हैं। आप को अद्यतन करने और "कनेक्शन" आप अपने व्यापार परत (सर्वर कनेक्टिविटी) और UIViewController के बीच है की किस तरह कर रहे हैं जो की निर्भर करता है, मैं एक है कि आपकी आवश्यकताओं के अनुरूप होगा सिफारिश कर सकते हैं।

+0

जब मुझे इसकी आवश्यकता थी तो मैं इस के साथ गया। –

+72

यह उत्तर वास्तव में प्रश्न का उत्तर नहीं देता है। आप दृश्य को फिर से लोड करने के 3 तरीके सुझाते हैं, लेकिन आप इनमें से किसी भी सुझाव को कार्यान्वित करने के बारे में जानकारी के बारे में जानकारी प्रदान नहीं करते हैं या यहां तक ​​कि लिंक प्रदान नहीं करते हैं। – Gogeta70

+1

मैं एक नया दृश्य धक्का देने के समान एनीमेशन के साथ एक सबव्यू लोड करना चाहता हूं। –

2

अद्यतन डेटा ... परिवर्तन बटन .. titles..whatever सामान आप अपडेट करना पड़ता है

तो बस फोन

[self.view setNeedsDisplay]; 
+1

मुझे डेटाबेस से कुछ प्रविष्टियों को फिर से लोड करना होगा। मुझे नहीं लगता कि विचारों को दोबारा हटाने का तरीका यहां जाना है। –

+0

@TiagoVeloso आपने इसे कैसे हल किया? –

-5

आप का उपयोग करना चाहिए

-(void)viewWillAppear:(BOOL)animated 

और अपनी प्रविष्टियां सेट की तरह आप चाहते हैं ...

+0

डेटा लोड करने के लिए वेब सेवा के अनुरोध को * भेजने के लिए यह एक मान्य संकेत हो सकता है, लेकिन यह जवाब नहीं देता है कि दृश्य को अपडेट करने के लिए वेब सेवा प्रतिक्रिया को असीमित रूप से कैसे संभालना है। –

21

यदि आप जानते हैं आपके डेटाबेस hasbee अद्यतन और तुम सिर्फ ताज़ा करने के लिए viewcontrolle (जो मेरा मामला भी है) । मुझे कोई अन्य समाधान नहीं मिला लेकिन मैंने जो किया वह है जब मेरा डेटाबेस अपडेट किया गया था, जिसे मैंने

[स्वयं दृश्यडिडलोड];

फिर से, और यह काम किया। यदि आप अन्य viewWillAppear ओवरराइड या loadView तो उसी क्रम में भी उन्हें फोन याद है। पसंद है।

[स्वयं दृश्यडिडलोड]; [स्वयं दृश्य WillAppear: हाँ];

लेकिन मुझे लगता है कि ब्राउज़र में रीफ्रेश बटन जैसे अधिक विशिष्ट समाधान होना चाहिए। अगर किसी plz अपलोड की है Anse

1

Reinitialise दृश्य नियंत्रक

YourViewController *vc = [[YourViewController alloc] initWithNibName:@"YourViewControllerIpad" bundle:nil]; 
[self.navigationController vc animated:NO]; 
+0

यह पुरानी शैली है। स्टोरीबोर्ड के साथ आधुनिक परियोजनाएं अधिकतर एक्सआईबी का उपयोग नहीं करेंगे; इसके बजाय स्टोरीबोर्ड का उपयोग करें। – Raptor

3

इस प्रयास करें, आप, दृश्य फिर से लोड करने के रूप में यह एक मेरे लिए काम करता दोनों तरीकों कॉल करनी होगी

-Objective- सी

[self viewDidLoad]; 
[self viewWillAppear:YES]; 

-Swift

self.viewDidLoad() 
self.viewWillAppear(true) 
+1

यह सही जवाब नहीं है। जब आप रीलोड लोड के लिए viewDidLoad को कॉल करते हैं तो आपके एप्लिकेशन के लिए मेमोरी बढ़ जाएगी। यह उचित उत्तर नहीं है .. – Singapore

+0

अभी भी यह अन्य के लिए काम करता है इसलिए कृपया डाउनमार्क @ सिंगापुर –

+0

कॉलिंग नियंत्रक जीवन चक्र विधियों की सिफारिश नहीं की जाती है –

0

फिर से आपके व्यू कंट्रोलर पर सीधे। मेरी स्थिति में [self.view setNeedsDisplay]; और [self viewDidLoad]; [self viewWillAppear:YES]; काम नहीं करता है, लेकिन नीचे दी गई विधि काम करती है।

उद्देश्य सी में

UIStoryboard *MyStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil ]; 
UIViewController *vc = [MyStoryboard instantiateViewControllerWithIdentifier:@"ViewControllerStoryBoardID"]; 
[self presentViewController:vc animated:YES completion:nil]; 

स्विफ्ट:

let secondViewController = self.storyboard!.instantiateViewControllerWithIdentifier("ViewControllerStoryBoardID") 
self.presentViewController(secondViewController, animated: true, completion: nil) 
7

आप एक ViewController फिर से लोड करने शुरू में एक XIB से भरी हुई, तो आप अगले UIViewController एक्सटेंशन का उपयोग कर सकते हैं:

extension UIViewController { 
    func reloadViewFromNib() { 
     let parent = view.superview 
     view.removeFromSuperview() 
     view = nil 
     parent?.addSubview(view) // This line causes the view to be reloaded 
    } 
} 
0

इसे अपने द्वारा ViewDidLoad या ViewWillAppear को कॉल करने की सलाह नहीं दी जाती है।

व्यूडिडलोड में डेटा तैयार करने के लिए loadData() फ़ंक्शन शामिल है। इसे प्रारंभिक दौड़ में निष्पादित किया जाता है।

जब आप पुनः लोड करना चाहते हैं, तो मॉडल से डेटा प्राप्त करने के लिए फिर से लोडडेटा() को कॉल करें। एक तालिका में देखें ReloadData() या नियमित दृश्य सेट मेंडिड्सडिस्प्ले() में।