मेरे पास एक टैबबार नियंत्रक है जिसमें दो टैब हैं, जिनमें से पहले नेविगेटर नियंत्रक का एक उदाहरण है। नेविगेटर कंट्रोलर को एक कस्टम व्यू कंट्रोलर "peersViewController" के साथ शुरू किया गया है जो सभी नेटवर्क सहकर्मियों को तालिका तालिका में सूचीबद्ध करता है। एक सहकर्मी का चयन करने पर, "FilesListViewController" का एक उदाहरण (जो c: \ निर्देशिका में फ़ाइलों को सूचीबद्ध करता है) नेविगेशन नियंत्रक स्टैक में धकेल दिया जाता है।UINavigationController popToRootViewController, और उसके बाद तुरंत एक नया दृश्य
इन फ़ाइलों में लिस्ट व्यू कंट्रोलर मेरे पास दस्तावेज़ निर्देशिका कहने के लिए नेविगेट करने के लिए एक बटन है। ऐसा करने के लिए मैं एक gotoDirectory कॉल करने के लिए इंटरफ़ेस वायर्ड था: (NSString *) rootViewController में पथ विधि:
- (void)gotoDirectory:(NSString*)path {
[[self navigationController] popToRootViewControllerAnimated:YES];
NSArray *files = [self getFilesFromPeerAtPath:path];
FilesListViewController *filesVC = [[FilesListViewController alloc] initWithFiles:files];
[[self navigationController] pushViewController:filesVC animated:YES];
[filesVC release];
}
हालांकि, जब मैं प्रेस कि बटन, navigationController रूट दृश्य नियंत्रक करने के लिए मेरे विचार पॉप था , लेकिन तब FilesListViewController जो मैंने तुरंत चालू नहीं किया था। लॉग से, मुझे पता है कि कस्टम initWithFiles विधि वास्तव में बुलाया गया था और फ़ाइल नाम प्राप्त करने के लिए नेटवर्क सामग्री हुई थी।
इसके बारे में कुछ और खराब है। मैंने दूसरे टैब पर क्लिक करने की कोशिश की और फिर पहले टैब पर वापस क्लिक करें, और हुला! मुझे आवश्यक फाइल नाम हैं। ऐसा लगता है कि डेटा और फ़ाइलों की तरह ListViewController को वास्तव में नेविगेटर नियंत्रक स्टैक में धकेल दिया गया था, लेकिन डिस्प्ले को रीफ्रेश नहीं किया गया था लेकिन rootViewController (peersViewController) की स्क्रीन पर फंस गया था।
क्या मैं कुछ गलत कर रहा हूं?
--बेन।
- प्रश्न पोस्ट करने के 15 मिनट बाद संपादित किया गया। मुझे एक कामकाज मिल गया, लेकिन यह मुझे परेशान करता है कि पॉप और फिर धक्का काम नहीं करता है।
- (void)gotoDirectory:(NSString*)path {
PeersListViewController *rootViewController = (PeersListViewController*)[[[self navigationController] viewControllers] objectAtIndex:0];
[[self navigationController] setViewControllers:[NSArray arrayWithObject:rootViewController]];
FilesListViewController *filesVC = [[FilesListViewController alloc] initWithFiles:files];
[[self navigationController] pushViewController:filesVC animated:YES];
[filesVC release];
}
यह navigationController की तरह प्रतीत नहीं होता है इस तरह से उन्हें धोखा दिया जाना चाहिए, और मैं शायद सब viewControllers कि मूल ढेर में थे जारी करने के लिए होगा। हालांकि यह आईफोन 3.0 सिम्युलेटर पर काम करता है।
यदि मैं इस कोड का उपयोग कर रहा हूं, तो स्मृति रिलीज को कैसे संभाला जाना चाहिए? क्या मुझे व्यू कंट्रोलर के मूल एनएसएआरएआरई मिलना चाहिए और सबकुछ छोड़ना चाहिए?
हाँ, आप एनीमेशन के बिना पॉप (इतना है कि यह सही दूर होता है) और फिर एनीमेशन के साथ पुश करने के लिए की जरूरत है। यदि आप दो एनीमेशन परिवर्तनों को एक साथ करने की कोशिश करते हैं (जो पूरा करने में समय लगता है) दृश्य खराब स्थिति में मिलेगा। – Jason
जैसा कि वर्णन किया गया है, यह मेरे लिए काम नहीं करता है। मुझे लगता है कि यह स्टैक परिवर्तनों पर एक समय मुद्दा है (ऐप्पल का एनीमेशन कोड बहुत नाजुक है, इसे खराब तरीके से लागू किया गया है) - यह तकनीक स्क्रीन पर और कितनी है, इस पर निर्भर करती है या नहीं। – Adam