मेरे साथ कुछ अजीब व्यवहार हो रहा है presentViewController:animated:completion
। मैं जो बना रहा हूं वह अनिवार्य रूप से एक अनुमान लगाने का खेल है।
मेरे पास एक UIViewController
फ्रीक्वेंसी (फ्रीक्वेंसी व्यू कंट्रोलर) है जिसमें एक UITableView
फ्रीक्वेंसी (फ्रीटेबल व्यू) है। जब उपयोगकर्ता प्रश्न के उत्तर में पंक्ति पर टैप करता है जिसमें सही उत्तर होता है, तो एक दृश्य (correctViewController) तत्काल होना चाहिए और इसका दृश्य स्क्रीन के नीचे से, एक मोडल दृश्य के रूप में स्लाइड होना चाहिए। यह उपयोगकर्ता को बताता है कि उनके पास एक सही उत्तर है और अगले प्रश्न के लिए तैयार आवृत्तिदृश्यकंट्रोलर को इसके पीछे रीसेट करता है। correctViewController अगले सवाल का खुलासा करने के लिए एक बटन प्रेस पर खारिज कर दिया है।
यह सब हर बार सही ढंग से काम करता है, और सही व्यू कॉन्ट्रोलर का नजरिया तब तक तुरंत दिखाई देता है जब तक वह presentViewController:animated:completion
है animated:NO
।
अगर मैं सेट करता हूं animated:YES
, तो correctViewController को इनिशियलाइज़ किया जाता है और कॉल किया जाता है viewDidLoad
। हालाँकि viewWillAppear
, viewDidAppear
और पूरा होने वाले ब्लॉक presentViewController:animated:completion
को नहीं कहा जाता है। जब तक मैं एक दूसरा टैप नहीं करता, तब तक ऐप केवल फ्रीक्वेंसी व्यू कंट्रोलर दिखाता है। अब, viewWillAppear, viewDidAppear और पूर्णता ब्लॉक को कहा जाता है।
मैंने थोड़ी और जांच की, और यह सिर्फ एक और नल नहीं है जो इसे जारी रखने का कारण बनेगा। ऐसा लगता है कि अगर मैं अपने iPhone को झुकाता हूं या हिलाता हूं, तो इससे व्यूविल्लॉड आदि को ट्रिगर किया जा सकता है। यह ऐसा है जैसे यह प्रगति होने से पहले किसी अन्य उपयोगकर्ता इनपुट का इंतजार कर रहा है। यह एक वास्तविक iPhone और सिम्युलेटर पर होता है, जिसे मैंने सिम्युलेटर को शेक कमांड भेजकर साबित किया था।
मैं वास्तव में इस बारे में क्या करना है के रूप में एक नुकसान में हूँ ... मैं वास्तव में किसी भी मदद प्रदान कर सकते हैं किसी की सराहना करेंगे।
धन्यवाद
यहाँ मेरा कोड है। यह बहुत आसान है ...
यह questionViewController में कोड है जो questionTableView के प्रतिनिधि के रूप में कार्य करता है
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row != [self.frequencyModel currentFrequencyIndex])
{
// If guess was wrong, then mark the selection as incorrect
NSLog(@"Incorrect Guess: %@", [self.frequencyModel frequencyLabelAtIndex:(int)indexPath.row]);
UITableViewCell *cell = [self.frequencyTableView cellForRowAtIndexPath:indexPath];
[cell setBackgroundColor:[UIColor colorWithRed:240/255.0f green:110/255.0f blue:103/255.0f alpha:1.0f]];
}
else
{
// If guess was correct, show correct view
NSLog(@"Correct Guess: %@", [self.frequencyModel frequencyLabelAtIndex:(int)indexPath.row]);
self.correctViewController = [[HFBCorrectViewController alloc] init];
self.correctViewController.delegate = self;
[self presentViewController:self.correctViewController animated:YES completion:^(void){
NSLog(@"Completed Presenting correctViewController");
[self setUpViewForNextQuestion];
}];
}
}
यह सही ViewController के पूरे है
@implementation HFBCorrectViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
// Custom initialization
NSLog(@"[HFBCorrectViewController initWithNibName:bundle:]");
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
NSLog(@"[HFBCorrectViewController viewDidLoad]");
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSLog(@"[HFBCorrectViewController viewDidAppear]");
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)close:(id)sender
{
NSLog(@"[HFBCorrectViewController close:sender:]");
[self.delegate didDismissCorrectViewController];
}
@end
संपादित करें:
मुझे यह प्रश्न पहले मिला था: UITableView और presentViewController प्रदर्शित करने के लिए 2 क्लिक लेता है
और अगर मैं अपना didSelectRow
कोड इसे बदल देता हूं , तो यह एनीमेशन के साथ बहुत समय तक काम करता है ... लेकिन यह गड़बड़ है और यह समझ में नहीं आता है कि यह पहली जगह में काम क्यों नहीं करता है। इसलिए मुझे लगता है कि एक जवाब के रूप में गिनती नहीं है ...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row != [self.frequencyModel currentFrequencyIndex])
{
// If guess was wrong, then mark the selection as incorrect
NSLog(@"Incorrect Guess: %@", [self.frequencyModel frequencyLabelAtIndex:(int)indexPath.row]);
UITableViewCell *cell = [self.frequencyTableView cellForRowAtIndexPath:indexPath];
[cell setBackgroundColor:[UIColor colorWithRed:240/255.0f green:110/255.0f blue:103/255.0f alpha:1.0f]];
// [cell setAccessoryType:(UITableViewCellAccessoryType)]
}
else
{
// If guess was correct, show correct view
NSLog(@"Correct Guess: %@", [self.frequencyModel frequencyLabelAtIndex:(int)indexPath.row]);
////////////////////////////
// BELOW HERE ARE THE CHANGES
[self performSelector:@selector(showCorrectViewController:) withObject:nil afterDelay:0];
}
}
-(void)showCorrectViewController:(id)sender
{
self.correctViewController = [[HFBCorrectViewController alloc] init];
self.correctViewController.delegate = self;
self.correctViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentViewController:self.correctViewController animated:YES completion:^(void){
NSLog(@"Completed Presenting correctViewController");
[self setUpViewForNextQuestion];
}];
}
presentViewController:
है जिसे ट्रिगर करना चाहिए एक बड़ी देरी से शुरू होता है। यह iOS 7 में बग प्रतीत होता है और Apple Dev Forums में भी चर्चा में है।