2014-11-20 35 views
0

我想知道我怎麼能叫AFHTTPSessionManagern從不同的類。目前我使用此代碼來獲得響應,但我不知道如何將其轉換爲需要參數和回發鏈接的單例類。我只接收和處理JSON代碼。AFNetworking 2.0 - 如何反應傳遞到另一個階級成功

static NSString * const BaseURLString = @"http://www.example.com/"; 
NSURL *baseURL = [NSURL URLWithString:BaseURLString]; 

NSDictionary *parameters = @{ @"Token" : @"123456"}; 

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL]; 
manager.responseSerializer = [AFJSONResponseSerializer serializer]; 
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; 

[manager GET:@"/list-21.aspx?" parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) { 
    self.someDictionary = responseObject[@"User"]; 
    [self.tableView reloadData]; 

} failure:^(NSURLSessionDataTask *task, NSError *error) { 
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error Retrieving Films" 
                 message:[error localizedDescription] 
                 delegate:nil 
               cancelButtonTitle:@"Ok" 
               otherButtonTitles:nil]; 
    [alertView show]; 
}]; 

回答

2

您可以使用委託方法。

創建一個單獨的類(Sync.h和Sync.m)僅包含以上創建AFHTTPSessionManager,參數和啓動連接的代碼。在這個類中創建委託方法。 現在從您的其他類(mainController)中,創建一個上述類的對象,並且sync.delegate = self。 一旦您收到repsonse /錯誤。委託在mainController中實現的已定義方法。

下面是例子: SyncManager.h

#import <UIKit/UIKit.h> 
@protocol SyncDelegate<NSObject> 

-(void)syncSuccess:(id) responseObject; 
-(void)syncFailure:(NSError*) error; 

@end 

@interface SyncManager: UIViewController 
{ 
} 

-(void) serviceCall:(NSString*)url withParams:(NSDictionary*) params; 
@end 

SyncManager.m

@interface SyncManager() 

@end 

@implementation SyncManager 

-(void) serviceCall:(NSString*)url withParams:(NSDictionary*) params { 
    NSURL *baseURL = [NSURL URLWithString:url]; 
    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL]; 
    manager.responseSerializer = [AFJSONResponseSerializer serializer]; 
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; 
    [manager GET:@"/list-21.aspx?" parameters:parameters success:^(NSURLSessionDataTask *task, id  responseObject) { 
     [self.delegate syncSuccess:responseObject]; 
    } failure:^(NSURLSessionDataTask *task, NSError *error) { 
     [self.delegate syncFailure:error]; 
    }]; 
} 
@end 

ViewController.m

-(void)fetchdata { 
    NSDictionary *dictionary = @{@"name":@"Arun"}; 
    SyncManager *sync = [[SyncManager alloc] init]; 
    sync.delegate = self; 
    [sync serviceCall:@"www.google.com" withparams:dictionary]; 
} 

-(void)syncSuccess:(id) responseObject { 
    // Parse your data 
} 

-(void)syncFailure:(NSError*) error { 
    //display Error 
} 
+0

顧感謝您的回答,你能不能給我委託的一些例子。我也可以把所有的API調用AFNetworking,所以我可能有不止一種方法? – GuyWhoReadsStockoverflow 2014-11-20 17:05:47

+0

上面加了一個例子 – 2014-11-20 17:48:46

+0

嗨,謝謝,例如。我試過,但我得到錯誤的線self.delgate說屬性代理找不到對象類型的SyncManager – GuyWhoReadsStockoverflow 2014-11-20 22:31:39

0

您可以使用NSNotificationCenter並傳遞通過該反應。這有額外的好處,多個類可以同時收聽。如果數據影響用戶界面,則會給他們相應更新的機會。

[manager GET:@"/list-21.aspx?" parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) { 
    self.someDictionary = responseObject[@"User"]; 
    [self.tableView reloadData]; 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"USER_DATA_ARRIVED" object:responseObject[@"User"]]; 

} failure:^(NSURLSessionDataTask *task, NSError *error) { 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"USER_DATA_ARRIVED" object:nil]; 

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error Retrieving Films" 
                message:[error localizedDescription] 
                delegate:nil 
              cancelButtonTitle:@"Ok" 
              otherButtonTitles:nil]; 
    [alertView show]; 
}]; 

添加觀察員通知名稱,數據將被包含在notification.object,而如果失敗將是零

+0

確定這是有道理的,但大多數的數據不會改變得這麼快,要求即時改變/重裝。我的問題是更多在創建單獨的類,我可以把所有的API調用和任何控制器類使用它們的線 – GuyWhoReadsStockoverflow 2014-11-20 17:27:47

+0

那麼也許這是你應該問的問題;)這種方法可能仍處於單身,這是我如何使用它們使用。我的ViewControllers添加觀察者的任何電話,它對 – Flexicoder 2014-11-21 07:44:05

+0

感興趣,我沒有人回答這個問題,所以我改寫了它 – GuyWhoReadsStockoverflow 2014-11-21 11:01:47

相關問題