2013-11-17 6 views
0

Ребята помогают справиться с проблемой Я новичок в программировании, и, соответственно, у меня есть проблема в целом, я не знаю, как работать с сетью! Я написал класс, в который я вхожу на сайт после входа в систему. Я не могу использовать соединение для отправки других запросов в других представлениях !!! вот что я писал:Как использовать одно соединение с сетью в нескольких классах

- (IBAction)loginClicked:(id)sender { 
    @try { 

     if([[txtUserName text] isEqualToString:@""] || [[txtPassword text] isEqualToString:@""]) { 
      [self alertStatus:@"Пожалуйста заполните все поля!!!" :@"Авторизация не удолась!"]; 
     } else { 

      NSString *post =[[NSString alloc] initWithFormat:@"login=%@&pass=%@",[txtUserName text],[txtPassword text]]; 


      NSURL *url=[NSURL URLWithString:@"http://chgu.org/?mobile=1"]; 

      NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; 

      NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]]; 

      NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
      [request setURL:url]; 
      [request setHTTPMethod:@"POST"]; 
      [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
      [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
      [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
      [request setHTTPBody:postData]; 

      NSError *error = [[NSError alloc] init]; 
      NSHTTPURLResponse *response = nil; 
      NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

      if ([response statusCode] >=200 && [response statusCode] <300) 
      { 
       NSData *responseData = [[NSData alloc]initWithData:urlData]; 
       NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:nil]; 

       if([jsonObject objectForKey:@"error"]) 
       { 
        [self alertStatus:@"Ошибка ввода данных" :@"Ю хав а трабл"]; 

       } else { 

        [self alertStatus:@"Авторизация прошла успешно" :@""]; 
       } 

      } else { 
       if (error) NSLog(@"Error: %@", error); 
       [self alertStatus:@"Connection Failed" :@"Login Failed!"]; 
      } 
     } 
    } 
    @catch (NSException * e) { 
     NSLog(@"Exception: %@", e); 
     [self alertStatus:@"Login Failed." :@"Login Failed!"]; 
    } 

    [txtUserName resignFirstResponder]; 
    [txtPassword resignFirstResponder]; 
} 

как использовать эту связь, когда я перехожу на другую точку зрения! Пожалуйста, скажите мне, что-нибудь все, что сидит за компьютером за ночь, не может понять.

ответ

0

У вас есть правильная идея, предполагая, что вы хотите относительно плотную связь между этими контроллерами через этот протокол делегатов.

Поскольку ни один из контроллеров не знает о другом, пока это свойство делегата не установлено, вам необходимо иметь некоторый объект, который имеет ссылку на оба из них, связать это отношение. В вашем случае это, вероятно, делегат приложения, который может создавать оба контроллера, устанавливать его как делегата другого и передавать оба на ваш контроллер панели вкладок.

Возможно, вы хотите, чтобы делегат приложения предоставил обоим контроллерам ссылку на какой-либо объект общей модели. Ваш FirstViewController может обновить эту модель, когда вы нажимаете кнопку, и ваш SecondViewController может наблюдать изменения в модели, чтобы обновить ее отображение (или просто обновить его представление, когда оно появится на основе текущего состояния модели). Таким образом, вашим контроллерам не нужно ничего знать друг о друге.

в secondVC, определить что-то вроде следующего:

@protocol secondVCDelegate 

@interface secondVC : UIViewController 
    @property (nonatomic, assign) id<secondVCDelegate> delegate; 
@end 


@optional 
-(void)someDelegateMethod:(secondVC*)viewController; 

@end 

в момент создания экземпляра secondVC необходимо назначить делегатом свойство secondVC к себе! что-то вроде этого:

// in firstVC 
secondVC vc = [[secondVC alloc]...]; 
vc.delegate = self; 
[navcontroller pushVC:vc]; 
the line vc.delegate = self; does the trick. 

надеюсь, что это помогает ...

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