我正在开发一个允许用户通过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!
任何人都可以帮助我,请问我如何从另一个班级提出这个观点?
答案 0 :(得分:0)
问题是您正在创建一个名为“Main”的新视图控制器,并且该视图控制器未添加到应用程序的Windows层次结构中。
假设您的Facebook共享方法是在视图控制器类中实现的。你会打电话给
[self presentViewController:facebook animated:YES completion:nil]
理想情况下,用户当前正在与之交互的视图控制器是您应该用来调用“presentViewController”的视图控制器。
如果您尝试在viewDidLoad()方法中显示视图控制器,则可以再次出现此问题。
答案 1 :(得分:0)
如果您将此代码写入当前向用户显示的控制器中,则不会出现任何错误。 presentViewController
假设呈现另一个控制器的控制器已经在应用程序的UIWindow中有一个视图。
问题是MainRoot
实际上本身从未呈现给用户,因此它没有资格通过自身呈现任何其他视图控制器
答案 2 :(得分:0)
根据你的陈述:
对于这个社交网络,我创建了一个包含此代码的分隔类
我们没有这个类的类型的信息,是UIViewController还是NSObject等?
由于UINavigationController
无法在UIViewController
访问,因此您无法向self.navigationController
以外的类 [self.navigationController presentViewController:facebook animated:YES completion:nil];
提供视图控件。
查看我的回答here。
我使用装饰器设计模式将控件从类(比如UIView,UITableViewCell,NSObject等)转移到从UIViewController继承的类。然后你可以轻松打电话
ViewController *MainRoot = [[ViewController alloc] init];
[MainRoot presentViewController:facebook animated:YES completion:nil];
在同一个链接中,您将找到另一个有助于在窗口上显示视图控制器的答案。你也可以尝试一下。
关于你实际遇到的问题,在这里:
MainRoot
这里,Warning: Attempt to present <SLComposeViewController: 0x7ffc5afe70e0> on <ViewController: 0x7ffc5af57a60> whose view is not in the window hierarchy!
控制器是一个新分配的视图控制器,它从未被推送到导航堆栈,因此使用它来推送堆栈上的另一个视图控制器会引发此错误:
NSItemProvider(contentsOfURL: NSBundle.mainBundle().URLForResource("blockerList", withExtension: "json")
希望它有所帮助!
答案 3 :(得分:0)
如果要在MainRoot中显示另一个类的视图控制器,那么</ p>
首先,你必须从self呈现MainRoot视图控制器,最重要的是你可以呈现你的SLComposeViewController。