gpt4 book ai didi

ios - ViewWillAppear 被调用两次

转载 作者:行者123 更新时间:2023-11-29 13:00:07 27 4
gpt4 key购买 nike

我正在使用 Storyboard在 iOS 7 上编写应用程序。

我有一个导航 Controller 作为我的 Root View Controller ,我在其中嵌入了一个 View Controller 。

当应用程序加载时,viewDidLoad 被调用一次,viewWillAppear 被调用一次。这是正确的(我也会检查数据并更新 View 中的 View )。

但是,在我的 View Controller 中,我有一个按钮,允许用户使用“MFMessageComposeViewController” Controller 通过短信/文本共享信息。

所以这里的代码是

MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];

if([MFMessageComposeViewController canSendText])

{
controller.body = [NSString stringWithFormat:@"Some Text Here"];

controller.messageComposeDelegate = self;

[self presentViewController:controller animated:YES completion:nil];
}

委托(delegate)函数是

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
switch (result) {
case MessageComposeResultCancelled:
NSLog(@"Cancelled");
break;
case MessageComposeResultSent:
NSLog(@"Message Sent");
break;
default:
break;
}

[self dismissViewControllerAnimated:YES completion:nil];
//[controller dismissViewControllerAnimated:YES completion:nil]; //tried this as well but same result

}

但是,当我调用 dismissViewControllerAnimated.. 时,viewDidAppear 方法被调用了两次。您知道为什么会发生这种情况吗,因为这是检查数据两次,然后将内容添加到我的 View 中两次,而不是只添加一次?

谢谢,瓦伦

第 1 - ViewDidAppear 的堆栈跟踪是

0   Sweep                               0x0010a8f1 -[GoogleMapsViewController viewDidAppear:] + 56
1 UIKit 0x2fd3673f <redacted> + 410
2 UIKit 0x2fde6657 <redacted> + 182
3 UIKit 0x2fd3673f <redacted> + 410
4 UIKit 0x2fd36bcd <redacted> + 264
5 Sweep 0x000e9909 -[RESideMenu viewDidAppear:] + 88
6 UIKit 0x2fd3673f <redacted> + 410
7 UIKit 0x2fd36bcd <redacted> + 264
8 UIKit 0x2fe3321b <redacted> + 1682
9 UIKit 0x2fe32ab7 <redacted> + 170
10 UIKit 0x2fe329e3 <redacted> + 74
11 UIKit 0x2fe328c9 <redacted> + 288
12 UIKit 0x2fe323d9 <redacted> + 944
13 UIKit 0x2fd53ab7 <redacted> + 178
14 UIKit 0x2fd539cf <redacted> + 66
15 QuartzCore 0x2f9a9413 <redacted> + 234
16 libdispatch.dylib 0x37dd90af <redacted> + 22
17 libdispatch.dylib 0x37ddb9a9 _dispatch_main_queue_callback_4CF + 268
18 CoreFoundation 0x2d5625b1 <redacted> + 8
19 CoreFoundation 0x2d560e7d <redacted> + 1308
20 CoreFoundation 0x2d4cb471 CFRunLoopRunSpecific + 524
21 CoreFoundation 0x2d4cb253 CFRunLoopRunInMode + 106
22 GraphicsServices 0x322052eb GSEventRunModal + 138
23 UIKit 0x2fd80845 UIApplicationMain + 1136
24 Sweep 0x00098299 main + 116
25 libdyld.dylib 0x37dedab7 <redacted> + 2

)

第二 - ViewDidAppear 的堆栈跟踪是

0   Sweep                               0x0010a8f1 -[GoogleMapsViewController viewDidAppear:] + 56
1 UIKit 0x2fd3673f <redacted> + 410
2 UIKit 0x2fde6657 <redacted> + 182
3 UIKit 0x2fd3673f <redacted> + 410
4 CoreFoundation 0x2d4e0803 <redacted> + 50
5 CoreFoundation 0x2d4da21d <redacted> + 220
6 UIKit 0x2fd3687b <redacted> + 726
7 UIKit 0x2fd36bcd <redacted> + 264
8 UIKit 0x2fe3321b <redacted> + 1682
9 UIKit 0x2fe32ab7 <redacted> + 170
10 UIKit 0x2fe329e3 <redacted> + 74
11 UIKit 0x2fe328c9 <redacted> + 288
12 UIKit 0x2fe323d9 <redacted> + 944
13 UIKit 0x2fd53ab7 <redacted> + 178
14 UIKit 0x2fd539cf <redacted> + 66
15 QuartzCore 0x2f9a9413 <redacted> + 234
16 libdispatch.dylib 0x37dd90af <redacted> + 22
17 libdispatch.dylib 0x37ddb9a9 _dispatch_main_queue_callback_4CF + 268
18 CoreFoundation 0x2d5625b1 <redacted> + 8
19 CoreFoundation 0x2d560e7d <redacted> + 1308
20 CoreFoundation 0x2d4cb471 CFRunLoopRunSpecific + 524
21 CoreFoundation 0x2d4cb253 CFRunLoopRunInMode + 106
22 GraphicsServices 0x322052eb GSEventRunModal + 138
23 UIKit 0x2fd80845 UIApplicationMain + 1136
24 Sweep 0x00098299 main + 116
25 libdyld.dylib 0x37dedab7 <redacted> + 2

)

最佳答案

我使用的是旧版本的第三方库,这导致 viewdidappear 被调用两次。此问题已通过更新库解决。

关于ios - ViewWillAppear 被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19967382/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com