В основном я получил 2 NSURLConnections. Первый получает токен от моего API, а второй получает некоторые события из API, но для этого нужен токен. В настоящее время я изучаю объекты C/Ios, поэтому это не настоящее приложение. То, что я пытаюсь сделать, состоит в том, чтобы различать два соединения по моему свойству current_connection.Несколько NSURLConnection в строке
1) Мой первый вопрос: есть ли лучший способ сделать это?
2) Второй вопрос: безопасно ли сделать 2 таких соединения? Поскольку это должно произойти в этом порядке, я не знаю, будет ли IOS всегда это делать, если мой код будет таким. Например, если первые запросы занимают очень много времени, он уже запускает второй? Это было бы проблемой без наличия токена.
3) Я прочитал около https://github.com/AFNetworking/AFNetworking - должен ли я использовать его?
Мой код:
HomeViewController.h
#import <UIKit/UIKit.h>
@interface HomeViewController : UIViewController
@property (nonatomic, strong) NSString* current_connection;
@end
Мой HomeViewController.m
#import "HomeViewController.h"
@interface HomeViewController()
@end
@implementation HomeViewController
@synthesize current_connection;
- (void)viewDidLoad {
[super viewDidLoad];
//get user token
NSString *post = [NSString stringWithFormat:@"&email=%@&password=%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"email"], [[NSUserDefaults standardUserDefaults] objectForKey:@"password"]];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%lu",(unsigned long)[postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://localhost:3000/api/v1/sessions"]]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"];
[request setHTTPBody:postData];
current_connection = @"token";
NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];
//load events
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
NSString *url =[NSString stringWithFormat:@"http://localhost:3000/api/v1/events/start_events?user_email=%@&user_token=%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"email"], [[NSUserDefaults standardUserDefaults] objectForKey:@"token"]];
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
[req setHTTPMethod:@"GET"];
current_connection = @"event";
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:req delegate:self];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data {
NSError *error;
NSMutableDictionary *cdata = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:&error];
if(error)
{
NSLog(@"%@", [error localizedDescription]);
}
else {
if ([current_connection isEqual: @"token"]) {
NSString *token = cdata[@"token"];
NSLog(@"%@", token);
//save token to user defaults
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:token forKey:@"token"];
[defaults synchronize];
}
else {
//display events
NSLog(@"%@", cdata[@"events"]);
}
}
}
@end