IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Objective-C Discussion :

Partage sur Facebook


Sujet :

Objective-C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 189
    Points : 80
    Points
    80
    Par défaut Partage sur Facebook
    Bonjour à tous,

    Je travaille avec Windev Mobile et je tente de faire un partage facebook depuis IOS, je fais des tests à partir du code (simplifié) en dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            SLComposeViewController *controllerSLC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
            [controllerSLC setInitialText:@"Test de post sur facebook"];
            [self presentViewController:controllerSLC animated:YES completion:Nil];
    Je débute dans ce language et je bute sur le "self".
    Si j'ai bien compris self représente l'instance d'une classe dans l'utilisation d'une méthode ( en gros self = moimeme )

    Si j'utilise ce bou de code directement dans une fonction Objective C depuis WM, j'obtient un beau "USe of undeclared identifier 'self' .". Si je comprend bien, je ne suis pas dans une méthode donc je ne peux pas l'utiliser.

    De ce fait, j'ai testé en exportant ces lignes de codes dans une classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //
    //  iFacebook.h
    //  iFacebook
     
    #import <UIKit/UIKit.h>
     
    @interface ViewController : UIViewController
     
    - (void)facebookPost;
     
    @end
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    //
    //  iFacebook.m
    //  iFacebook
     
    #import "iFacebook.h"
    #import <Social/Social.h>
    #import <Accounts/Accounts.h>
     
    @implementation ViewController
     
    - (void)facebookPost {
     
        if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
     
            SLComposeViewController *controllerSLC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
            [controllerSLC setInitialText:@"Test de post sur facebook"];
            [self presentViewController:controllerSLC animated:YES completion:Nil];
     
        }
    }
     
    @end
    Et je l'appel de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [[ViewController alloc] facebookPost ]
    J'obtient un beau message : Warning: Attempt to present <SLComposeViewController: ..... whose view is not in the window hierarchy!

    Si quelqu'un peux m'éclairer ... merci par avance.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Août 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 189
    Points : 80
    Points
    80
    Par défaut
    J'ai trouvé un bout de code qui résout le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    UIViewController *activeController = [UIApplication sharedApplication].keyWindow.rootViewController;
    if ([activeController isKindOfClass:[UINavigationController class]]) {
       activeController = [(UINavigationController*) activeController visibleViewController];
    }
     
    [activeController presentViewController:controllerSLC animated:YES];
    Mais je ne suis pas sur de bien le comprendre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UIViewController *activeController = [UIApplication sharedApplication].keyWindow.rootViewController;
    Cela récupère le controlleur de vue de l'application

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [activeController presentViewController:controllerSLC animated:YES];
    Cela demande au controleur de vue d'ouvrir la vue : controllerSLC

    Mais j'ai du mal à cerner les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ([activeController isKindOfClass:[UINavigationController class]]) {
       activeController = [(UINavigationController*) activeController visibleViewController];
    }
    if ([activeController isKindOfClass:[UINavigationController class]]) : Verifies si activeController est une instance de UINavigationController
    activeController = [(UINavigationController*) activeController visibleViewController : ???


    Si quelqu'un serait m'expliqué, ça serait sympa.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 189
    Points : 80
    Points
    80
    Par défaut
    A nouveau confronté à un petit problème

    Le code ci-dessous fonctionne bien si il est appelé depuis l'écran d'accueil, mais dès lors que je l'appelle de la fenêtre ou il doit être l'erreur revient : Warning: Attempt to present <SLComposeViewController: 0x16a85bd0> on <CFenPrincipaleViewController: 0x15623540> whose view is not in the window hierarchy!

    Si il y a quelqu'un pour m'aiguiller ....

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    Je comprends l'erreur qui est explicite, mais pour te donner une réponse à ce problème: je ne sais pas

    Et pourquoi tu ne crées pas une vraie fenêtre normalement avec un xib ou un storyboard?

    Parce que la bibliothèque iOS et XCode sont très bien conçus et faire un truc classique c'est simple et tout le monde est content

    Mais créer "on the fly" une vue avec un contrôleur par défaut en l'injectant dans la pile des vues: Ouch c'est un truc qui ne se fait plus depuis 2010 et iOS 4

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 189
    Points : 80
    Points
    80
    Par défaut
    Pour donner plus d'information, je développe avec Windev Mobil, qui génère un projet que j'ouvre ensuite avec XCode pour le compiler.
    Seulement dans WM la fonctionnalité de partage sur facebook n'a pas encore été développée.

    J'ai la possibilité de créer des fonctions ObjC et d'intégrer des fichiers .h et .m

    Mon projet est fini à 90% et les 10% restant sont des fonctionnalités à faire en ObjC, toute la partie création fenêtre, etc ... se passe sous WM.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 189
    Points : 80
    Points
    80
    Par défaut
    J'avance.... j'avance.
    Peut être serais tu m'aider :

    Si j'utilise la fonctionnalité de partage facebook depuis le 1er écran de l'application, je dois utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    activeController = [(UINavigationController*) activeController visibleViewController];
    Si j'utilise la fonctionnalité de partage facebook depuis une fenêtre enfant du 1er écran de l'application, je dois utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    activeController = [(UINavigationController*) activeController visibleViewController];
    Si j'utilise la fonctionnalité de partage facebook depuis une fenêtre enfant, d'un enfant du 1er écran de l'application, je dois utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    activeController = activeController.modalViewController.modalViewController;
    etc...

    Et la en l’occasion, c'est sur le 3eme niveau de parenté, cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if ([activeController isKindOfClass:[UINavigationController class]]) {
                activeController = [(UINavigationController*) activeController visibleViewController]; 
            } else if (activeController.modalViewController.modalViewController.modalViewController){
    			activeController = activeController.modalViewController.modalViewController.modalViewController;
            } else if (activeController.modalViewController.modalViewController){
    			activeController = activeController.modalViewController.modalViewController;
            } else if (activeController.modalViewController){
    			activeController = activeController.modalViewController;
    	}
    Serais tu si il y a possibilité d'optimiser cela ? Car c'est pas beau et c'est pas trop réutilisable.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    Impossible de t'aider parce que tu fais du développement "non conforme"

    Surtout lorsque je vois ceci "activeController.modalViewController.modalViewController.modalViewController"


    Comment veux-tu t'aider lorsqu'on ne connait rien du projet?
    Tu es en train de modifier la pile des vues comme un sauvage, mais on ne connait pas le nombre de vues de ton projet, celles présentes à un instant T, ...

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Août 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 189
    Points : 80
    Points
    80
    Par défaut
    Je n'ai pas généré cette organisation de vue
    C'est WM qui génère tout cela automatiquement.

    C'est pour cela que j'ai du mal à créer ma fonctionnalité. Je pense que je vais faire avec, je pense ne pas avoir le choix.

Discussions similaires

  1. Partage sur Facebook / Twitter
    Par Finnegans dans le forum APIs Réseaux sociaux
    Réponses: 3
    Dernier message: 16/06/2011, 22h55
  2. Twitterfeed et bouton partager sur Facebook
    Par nico21000 dans le forum Facebook
    Réponses: 0
    Dernier message: 27/04/2011, 23h33
  3. Partager sur Facebook
    Par popcorn dans le forum Facebook
    Réponses: 8
    Dernier message: 19/04/2011, 16h54
  4. Créer un bouton "Partager sur Facebook" personnalisé
    Par cgeourjon dans le forum Facebook
    Réponses: 0
    Dernier message: 11/05/2010, 17h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo