Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 尝试从另一个类显示视图控制器_Ios_Objective C_Uiviewcontroller_Slcomposeviewcontroller - Fatal编程技术网

Ios 尝试从另一个类显示视图控制器

Ios 尝试从另一个类显示视图控制器,ios,objective-c,uiviewcontroller,slcomposeviewcontroller,Ios,Objective C,Uiviewcontroller,Slcomposeviewcontroller,我正在开发一个应用程序,允许用户通过Facebook、Twitter和电子邮件进行共享 对于此社交网络,我创建了一个单独的类,其中包含以下代码: -(void)Facebooksharing { SLComposeViewController *facebook = [[SLComposeViewController alloc] init]; facebook = [SLComposeViewController composeViewControllerForServiceT

我正在开发一个应用程序,允许用户通过Facebook、Twitter和电子邮件进行共享

对于此社交网络,我创建了一个单独的类,其中包含以下代码:

-(void)Facebooksharing
{
    SLComposeViewController *facebook = [[SLComposeViewController alloc] init];
    facebook = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
    [facebook setInitialText:@"Hello"];
    [facebook setTitle:@"Helle"];

    ViewController *MainRoot = [[ViewController alloc] init];

    [MainRoot presentViewController:facebook animated:YES completion:nil];

}
无论何时调用此函数,都会出现以下错误:

Warning: Attempt to present <SLComposeViewController: 0x7ffc5afe70e0> on <ViewController: 0x7ffc5af57a60> whose view is not in the window hierarchy!
警告:尝试显示其视图不在窗口层次结构中的对象!

任何人都可以帮助我如何从其他类显示此视图?

问题是您正在创建一个名为“Main”的新视图控制器,并且该视图控制器未添加到应用程序的windows层次结构中

假设您的FaceBookShare方法是在视图控制器类中实现的。你会打电话的

[self presentViewController:facebook animated:YES completion:nil]
理想情况下,用户当前与之交互的视图控制器应该是您用来调用“presentViewController”的视图控制器


如果尝试在viewDidLoad()方法中显示视图控制器,则可能会再次出现此问题

问题在于您正在创建一个名为“Main”的新视图控制器,并且该视图控制器未添加到应用程序的windows层次结构中

假设您的FaceBookShare方法是在视图控制器类中实现的。你会打电话的

[self presentViewController:facebook animated:YES completion:nil]
理想情况下,用户当前与之交互的视图控制器应该是您用来调用“presentViewController”的视图控制器


如果尝试在viewDidLoad()方法中显示视图控制器,则可能会再次出现此问题

如果您在当前显示给用户的控制器中编写此代码,则不会得到任何错误
presentViewController
假设呈现另一个控制器的控制器在应用程序的UI窗口中已经有一个视图


问题是,
MainRoot
本身实际上从未向用户显示,因此它没有资格通过自身显示任何其他视图控制器

如果您在当前显示给用户的控制器中写入此代码,您将不会得到任何错误
presentViewController
假设呈现另一个控制器的控制器在应用程序的UI窗口中已经有一个视图

问题在于,
MainRoot
实际上从未向用户显示过,因此它没有资格根据您的陈述通过自身显示任何其他视图控制器:

对于这个社交网络,我创建了一个包含此代码的独立类

我们没有此类类型的信息,是UIViewController还是NSObject等

决定您不能从类中向
UIViewController
以外的
UINavigationController
显示viewcontroller,因为那里无法访问
self.navigationController

看看我的答案

我使用decorator设计模式将控件从类(比如UIView、UITableViewCell、NSObject等)转移到从UIViewController继承的类。然后你就可以很容易地打电话了

   [self.navigationController presentViewController:facebook animated:YES completion:nil];
在同一链接中,您将找到另一个有助于在窗口上显示viewcontroller的答案。你也可以试试看

关于您实际遇到的问题,如下所示:

ViewController *MainRoot = [[ViewController alloc] init];
[MainRoot presentViewController:facebook animated:YES completion:nil];
此处,
MainRoot
controller是一个新分配的viewcontroller,它从未被推送到导航堆栈,因此使用它来推堆栈上的另一个viewcontroller会引发以下错误:

Warning: Attempt to present <SLComposeViewController: 0x7ffc5afe70e0> on <ViewController: 0x7ffc5af57a60> whose view is not in the window hierarchy!
警告:尝试显示其视图不在窗口层次结构中的对象!
希望有帮助

根据您的陈述:

对于这个社交网络,我创建了一个包含此代码的独立类

我们没有此类类型的信息,是UIViewController还是NSObject等

决定您不能从类中向
UIViewController
以外的
UINavigationController
显示viewcontroller,因为那里无法访问
self.navigationController

看看我的答案

我使用decorator设计模式将控件从类(比如UIView、UITableViewCell、NSObject等)转移到从UIViewController继承的类。然后你就可以很容易地打电话了

   [self.navigationController presentViewController:facebook animated:YES completion:nil];
在同一链接中,您将找到另一个有助于在窗口上显示viewcontroller的答案。你也可以试试看

关于您实际遇到的问题,如下所示:

ViewController *MainRoot = [[ViewController alloc] init];
[MainRoot presentViewController:facebook animated:YES completion:nil];
此处,
MainRoot
controller是一个新分配的viewcontroller,它从未被推送到导航堆栈,因此使用它来推堆栈上的另一个viewcontroller会引发以下错误:

Warning: Attempt to present <SLComposeViewController: 0x7ffc5afe70e0> on <ViewController: 0x7ffc5af57a60> whose view is not in the window hierarchy!
警告:尝试显示其视图不在窗口层次结构中的对象!

希望有帮助

如果要在MainRoot中显示来自另一个类的视图控制器,则


首先,您必须从self中显示MainRoot视图控制器,此外,您还可以显示您的SLComposeViewController。

如果您想在MainRoot中显示另一个类中的视图控制器,那么


首先,您必须从self中演示MainRoot视图控制器,在此基础上,您可以演示您的SLComposeViewController。

那么我如何在MainRoot中演示另一个类中的视图控制器那么我如何在MainRoot中演示另一个类中的视图控制器也许您应该尝试以下方法:
[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:facebook动画:是完成:无];
也许你应该试试这个:
[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:facebook动画:是完成:无];