我目前正在实现从应用程序到我的网络服务的连接,目前我正在尝试找出正确的方法。我决定使用 AFNetworking 库进行连接,并通过 AFNetworking 处理 JSON 输出。我在这里读到,实现这种异步的最佳方法是使用回调委托。这是我的两个课程的链接。我真的很喜欢一些关于我的实施的提示和批评,尤其是要改进的地方。
代码:
#import "SLLoginViewController.h"
@interface SLLoginViewController ()
@end
@implementation SLLoginViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
sharedWebService = [SLWebService sharedWebService];
[sharedWebService setDelegate:self];
[sharedWebService login:@"test@hotmail.de" withPassword:@"12345"];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
- (void)requestFinished:(NSString *)name withResult:(NSDictionary *)result andError:(NSError *)error
{
NSLog(@"%@", result);
}
@end
网络服务
#import <Foundation/Foundation.h>
#import "AFNetworking.h"
@class SLWebService;
@protocol SLWebServiceDelegate <NSObject>
@required
- (void)requestFinished:(NSString *)name withResult:(NSDictionary *)result andError:(NS
Error *)error;
@end
@interface SLWebService : NSObject
{
NSURL *baseURL;
AFHTTPClient *client;
}
@property id <SLWebServiceDelegate> delegate;
+ (id)sharedWebService;
- (void)login:(NSString *)email withPassword:(NSString *)password;
- (NSError *)generateError:(NSString *)description domain:(NSString *)domain;
@end
#import "SLWebService.h"
@implementation SLWebService
@synthesize delegate;
+ (id)sharedWebService
{
static SLWebService *sharedWebService = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedWebService = [[self alloc] init];
});
return sharedWebService;
}
-(id)init
{
self = [super init];
if(self)
{
baseURL = [[NSURL alloc] initWithString:@"http://www.domain.de/"];
client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];
}
return self;
}
-(void)login:(NSString *)email withPassword:(NSString *)password
{
NSDictionary *params = @{@"email":email, @"password":password};
NSMutableURLRequest *request = [client requestWithMethod:@"GET" path:@"login.php" parameters:params];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON)
{
NSString *result = [JSON objectForKey:@"result"];
if ([result isEqualToString:@"fail"])
{
[[self delegate] requestFinished:@"login" withResult:nil andError:[self generateError:[JSON objectForKey:@"reason"] domain:@"de.Searchlight.WebServiceError"]];
}
else
{
NSDictionary *dic = @{@"firstname":[JSON objectForKey:@"firstname"], @"lastname":[JSON objectForKey:@"lastname"], @"gender":[JSON objectForKey:@"gender"]};
[[self delegate] requestFinished:@"login" withResult:dic andError:[self generateError:[JSON objectForKey:@"reason"] domain:@"de.Searchlight.WebServiceError"]];
}
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *err, id JSON)
{
[[self delegate]requestFinished:@"login" withResult:nil andError:err];
}];
[operation start];
}
-(NSError *)generateError:(NSString *)description domain:(NSString *)domain
{
NSError *error;
NSDictionary *userInfo = @{NSLocalizedDescriptionKey : description};
error = [NSError errorWithDomain:domain code:200 userInfo:userInfo];
return error;
}
@end