2015-06-01 2 views
-1

Я работаю над проектом XMPP. Я создал соединение и смог успешно войти в систему. Но у меня есть методы настройки и все в методе appdelegate [connect]. поэтому, когда я успешно подключился к приложению, но когда мне нужно получить список друзей, мне нужно снова вызвать метод appdelegate [connect], поэтому я хочу установить все условие и все в viewcontroller Loginbutton. поэтому, когда второй метод appdelegate [connect] вызывает это, он не влияет на другой контроллер представления, а также результат. Я пробовал это с объявлением метода BOOL, но я не увенчался успехом. вот моя попытка.ios xmpp вызывает другой контроллер viewview от контроллера oneview через appdelegate

//appdelegate.m file// 
    -(BOOL) isauthenticate; // Mthod declaration 

    - (BOOL)connect 
    { 
    // HUD = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES] ; 
    //HUD.delegate = self; 



    HUD = [[MBProgressHUD alloc ] initWithWindow:[UIApplication sharedApplication ].keyWindow]; [self.window.rootViewController.view addSubview:HUD]; 
    [HUD setDetailsLabelText:@"Please wait..."]; 
    [HUD setDimBackground:YES]; 
    [HUD setOpacity:0.5f]; 
    [HUD show:YES]; 
    // HUD.color =[UIColor colorWithPatternImage:[UIImage imageNamed:@"logo"]]; 

    // [HUD hide:YES afterDelay:10.0]; 


    if (![xmppStream isDisconnected]) { 
    return YES; 
    // isauthenticate=YES; 
    } 

    NSString *myJID = [[NSUserDefaults standardUserDefaults] stringForKey:kXMPPmyJID]; 
    NSString *myPassword = [[NSUserDefaults standardUserDefaults] stringForKey:kXMPPmyPassword]; 

    // 
    // If you don't want to use the Settings view to set the JID, 
    // uncomment the section below to hard code a JID and password. 
    // 
    // myJID = @"[email protected]/xmppframework"; 
    // myPassword = @""; 

    if (myJID == nil || myPassword == nil) { 
    return NO; 
    } 

    [xmppStream setMyJID:[XMPPJID jidWithString:myJID]]; 
    password = myPassword; 

    NSError *error = nil; 
    if (![xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error]) 
    { 
    HUD.hidden=YES; 
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error connecting" 
                 message:@"See console for error details." 
                 delegate:nil 
               cancelButtonTitle:@"Ok" 
               otherButtonTitles:nil]; 
    [alertView show]; 

    // DDLogError(@"Error connecting: %@", error); 

    // return NO; 

    } 

return YES; 
    } 

Вот мой Viewcontroller.m файл

   //viewcontroller.m file// 
     - (IBAction)checkLogin:(id)sender { 
     [self dismissKeyboard]; 
     // HUD = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES] ; 
     // HUD.delegate = self; 

     NSLog(@"Email: %@ Password: %@",mViewEmail.text,mViewPassword.text); 


    [self setField:mViewEmail forKey:kXMPPmyJID]; 
    [self setField:mViewPassword forKey:kXMPPmyPassword]; 


    if ([[self appDelegate ]connect]) 
    { 
    if (appdelegate.isauthenticate==YES) { 
     //appdelegate.isauthenticate=YES; 
     [self showHome]; 
     } 
     else 
     { 
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sorry" 
                 message:@"Please Check Username or Password" 
                 delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [alert show]; 

      } 
     } 




     } 


        - (void)showHome{ 
     //[[self appDelegate]isauthenticate]; 
    [self performSegueWithIdentifier:@"signIn" sender:self]; 
      } 

что такое решение для этого?

ответ

1

1) не завершайте сеанс xmpp.

2) если у вас активная сессия xmpp, нет необходимости вызывать метод connect делегата приложения.

3) если срок действия вашего сеанса истекает, а не методы подключения вызова.

4) для извлечения списка друзей необходимо управлять списком на сервере xmpp с помощью клиента iOS XMPP.

5) Вы можете получить список своих списков, вызвав метод getAllRoster класса XMPPRoster, иначе вы можете реализовать протокол XMPP Roster в своем классе.

+0

так как я могу установить это в контроллере buddlist? В настоящее время я использую это условие для просмотра списка друзей. 'if ([[self appDelegate] connect]) { titleLabel.text = [[[[self appDelegate] xmppStream] myJID] bare]; } else { titleLabel.text = @ "Нет JID"; } [названиеLabel sizeToFit]; self.navigationItem.titleView = названиеLabel; ' –

+0

На самом деле вы проверяете свою аутентификацию с помощью jid и pwd, если они аутентифицированы или нет. вы не управляете списком контактов. –

+0

да, вы правы, но когда я использую это условие, он снова вызовет метод подключения, и моя страница снова будет перенаправлена ​​на главную. Потому что connectiondidauthenticate снова выполняется. поэтому, я хочу реализовать segue только в системе входа. –

Смежные вопросы