伙计们帮助解决我刚接触编程的问题,因此我一般都有问题,我不知道如何使用网络!我写了一个类,我在登录后登录网站我不能使用连接在其他视图中发送其他请求! 这是我写的:
- (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 :(得分:0)
您有正确的想法,假设您希望通过该委托协议在这些控制器之间进行相对紧密的耦合。
由于在设置了委托属性之前,两个控制器都不知道另一个控制器,因此你需要有一些引用它们的对象连接该关系。在您的情况下,可能是可以创建两个控制器的应用程序委托,将一个设置为另一个的委托,并将它们传递给标签栏控制器。
您可能真正想要的是让app delegate为两个控制器提供对某个共享模型对象的引用。当您点击按钮时,您的FirstViewController可以更新该模型,并且您的SecondViewController可以观察模型的更改以更新其显示(或者仅在基于当前模型状态显示时更新其视图)。这样你的控制器就不需要彼此了解任何事情了。
在secondVC中,定义如下内容:
@protocol secondVCDelegate
@interface secondVC : UIViewController
@property (nonatomic, assign) id<secondVCDelegate> delegate;
@end
@optional
-(void)someDelegateMethod:(secondVC*)viewController;
@end
在创建secondVC实例时,您必须将secondVC的委托属性分配给self!像这样:
// in firstVC
secondVC vc = [[secondVC alloc]...];
vc.delegate = self;
[navcontroller pushVC:vc];
the line vc.delegate = self; does the trick.
希望它有所帮助...