Dont la vue n'est pas dans la fenêtre hiérarchie du problème?
Avertissement: Tentative de présenter sur dont la vue n'est pas dans la fenêtre hiérarchie!
Oui, j'ai regardé les autres questions et réponses avant de poster cette question. Ils n'ont pas aidé moi à résoudre ce problème. Voici ce que je fais. J'appelle ma classe singleton socialHelper pour afficher une fiche action, où postToFacebook
méthode est une option pour la sélectionner. En cliquant sur cette action, j'ai l'Avertissement ci-dessus et la postToFacebook
n'est pas affiché. Je suis d'appeler à partir d'un UIViewController avec le UINavigationController
que le contrôleur principal, et mon SocialHelper classe est un NSOject
.
- (void)postToFacebook
{
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
slComposeViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[slComposeViewController setInitialText:@"Building stairs? Checkout StairsPro on the app store!"];
[slComposeViewController addImage:[UIImage imageNamed:@"StairsIcon120x120.png"]];
[slComposeViewController addURL:[NSURL URLWithString:@"https://itunes.apple.com/us/app/stairs-pro/id477032819?ls=1&mt=8"]];
[self presentViewController:slComposeViewController animated:YES completion:nil];
//I've also tried this, which shows the post window, but after hitting cancel or post, my previous viewController is not the current viewController. So my navigation bar is gone and can't move around in my app.
//[[[[UIApplication sharedApplication]delegate]window]setRootViewController:slComposeViewController];
}else{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"No Facebook Account" message:@"No Facebook account has been configured. You can configure or create a Facebook account in settings." delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
[alert show];
}
}
Donc ce que je demande est ce qui est le meilleur moyen pour obtenir le slComposerViewController
à afficher dans ce cas, également, comment nous pourrions utiliser la UIApplication
option. Merci!!!!
- Est
SocialHelper
en fait sur l'écran? - Rien n'est affiché sur l'écran quand elle est appelée aussi loin que la PostToFacebook fenêtre. Juste l'Écran je l'ai appelé à partir. Mais le UActionSheet œuvres, puis j'ai frappé Post de Facebook, et j'ai l'avertissement et le UIActionSheet s'en va, et tout juste de retour à l'écran je l'ai appelé à partir.
presentViewController:animated:completion:
doit être appelée à partir de la viewController qui est actuellement présentée à l'écran. SiSocialHelper
n'est pas le actuellement présenté viewController alors vous ne devriez pas être l'appel de cette méthode- J'ai essayé de déplacer tout à la classe UIViewController c'est affiché et a obtenu le même avertissement.
- Êtes-vous sûr que vous avez le droit viewController?
- Non, pas exactement, je suis sûr que je suis en train de faire quelque chose de mal...juste ne sais pas quoi. Fonctionne très bien sur Cocos2d avec CCDirector. Post de facebook est appelé de mon aboutView viewController avec
[[SocialHelper sharedInstance]shareActionSheet];
qui fonctionne et s'affiche la feuille d'action...mais une fois de frapper postToFacebook je reçois le message d'avertissement. Des idées? J'utilise les Storyboards pour le aboutView si ce qui compte. - s'il vous plaît, faire part de votre projet; probablement le point de vue de la hiérarchie peut être salissant, mais sans voir comment le point de vue de la hiérarchie est construit, il est très difficile, même à deviner d'où le problème pourrait être...
- Le UINavigationController est la présentation de la vue. J'ai couru un NSLog pour voir ce que le courant viewController a été.
- Vous avez besoin pour briser le problème. J'ai eu une fois le problème de ce genre, a pris toute la journée pour comprendre que j'ai été absent 'super' appel. Essayez de présenter un simple point de vue du contrôleur [auto presentViewController:[UIViewController nouveau] animation:OUI achèvement:nil];
- Si vous faites appel à votre classe singleton socialHelper pour afficher une action de bilan et de votre SocialHelper classe est un NSOject alors vous ne voulez pas (ou ne pouvez pas) à l'utilisation de l'auto pour afficher la feuille d'action parce que le moi est un objet qui n'est pas le point de vue de la hiérarchie. Vous avez besoin d'utiliser une-vue-contrôleur pour afficher la feuille d'action.
- Voici ce que j'ai...MainViewController avec un UINavigationController, c'est un FlipsideViewController pour les paramètres, puis sur le bouton pour la page "à propos" qui est aussi un UIViewController. J'ai ajouté le journal dans le sujet où l'UIActionSheet est appelé à partir d' (Montre UINavigation est l'actuel ViewController). La méthode de la UIActionSheet est dans le socialhelper classe NSObject. J'ai Essayé de déplacer tout au Sujet de UIViewController classe...ce qui a donné le même résultat. Espérons que cette aide
Vous devez vous connecter pour publier un commentaire.
Je voudrais changer la méthode pour passer dans le ViewController s'assurer que les VC est de le présenter comme suit:
Et à l'intérieur de cette méthode lors de l'appel de presentViewController utilisation:
Je suppose alors que l'utilisation de votre socialHelper classe singleton serait quelque chose comme:
Pour votre deuxième question sur l'utilisation de la rootViewController essayez ceci:
Edit: étant donné que les deux premières suggestions n'ai pas de travail pour votre projet, essayez d'obtenir le plus haut ViewController et la présentation de slComposeViewController de lieu de "auto" comme suit:
Cette réponse ne résout pas votre problème, mais il doit faire un certain sens de pourquoi il n'est pas de travail et vous aider à trouver la bonne solution pour ce que vous avez initialement prévu.
SLComposeViewController
être unUIViewController
est associé à unUIView
qui sera affiché en haut de la vue sur le contrôleur reçoit le messagepresentViewController
.Comme fait dans cette ligne mais,
self
doit être unUIViewController
(un objet qui a une propriété en vue).Il ne fonctionnera que si vous déplacez votre
-postToFaceBook
méthode de laSocialHelper
classe et de le mettre à l'intérieur de votreUIViewController
classe (fichier) qui permettra d'afficher la feuille d'action, de sorte que la manièreself
est en fait unUIViewController
au lieu deNSObject
.De Apple UIViewController page de référence:
Votre
SocialHelper
classe n'est pas une vue de contrôleur afin de ne pas avoir une vue à laquelle la feuille d'action pourraient être ajoutés à l'afficher (sur le dessus).Je pense, même si vous héritez de votre
SocialHelper
deUIViewController
, la vue de votreSocialHelper
ne serait pas dans votre contrôleur de vue de la hiérarchie.Si ce n'est que deux ou trois contrôleurs de vue où vous en avez besoin pour afficher la feuille d'action, je voudrais reproduire le code au lieu de créer une catégorie distincte; si elle est de plusieurs contrôleurs de vue, alors il est logique d'avoir la feuille d'action logique d'affichage comme une classe distincte, vous avez juste besoin de trouver le bon modèle de conception pour le faire.
Edit 1
Oublié de mentionner la déclaration de la variable est manquante à l'
SLComposeViewController *
Est il manque juste dans votre post ou vous avez déclaré que la variable quelque part d'autre dans votre viewcontroller classe?
Essayer de le déclarer dans la même ligne que vous créez le
SLComposeViewController
; qui pourrait résoudre le problème. Si cela n'a pas de travail, puis double-vérifier tout ce que vous devez faire pour soutenir Facebook dans votre application en regardant cette très simple et facile à suivre tutoriel.Je suis en supposant que vous avez créé votre manette de navigation avec écran principal contrôleur que sa racine:
Et de montrer le revers de la médaille contrôleur de vous faire dans votre vue principale de contrôleur:
Le revers de la médaille contrôleur sur le bouton pour afficher la vue à propos gemmage; je pense vous faire un presentViewController pas un push:
Enfin, dans la vue à propos de contrôleur, vous devriez avoir à votre postToFacebook méthode avec la ligne corrigée mentionné ci-dessus; ce qui sera appelé par le journal (bouton?).