-(void)getDataFromServer: (NSMutableDictionary *)dict
{
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/doSomething",MainURL ]];
[AFJSONRequestOperation addAcceptableContentTypes:[NSSet setWithObject:@"text/html"]];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:nil parameters:dict];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON)
{
_myArray = JSON;
[_myTableView reloadData]; //Or do some other stuff that are related to the current `ViewController`
}
failure:^(NSURLRequest *request , NSURLResponse *response , NSError *error , id JSON)
{
NSLog(@"request: %@",request);
NSLog(@"Failed: %@",[error localizedDescription]);
}];
[httpClient enqueueHTTPRequestOperation:operation];
}
私のアプリの7つの場所で上記のコードを使用しています。コードの正確な塊は私のViewControllers
の7に複製されています。私が通常使っていたのは、NSObjectクラスで使用したいメソッドを配置し、必要なときにそれを割り当てて使用することですが、上記のAsyncとブロックを使用しているため、JSONをViewController
に返すことはできませんそれ、私はそれで必要なすべてのViewController
で、上記の方法を貼り付け&をコピーする必要があります。AFNetworkingメソッドにブロックを渡しますか?
私の目標は私のアプリで唯一の場所で上記を持っており、今でも私のアプリの周りに異なるViewControllers
からそれを呼び出すことができるようにすることですし、必要なデータを取得します。 私はNSNotification
またはKVO
のようなオブザーバを使わず、より洗練されたソリューションを探しています。 読んだ後、私はブロックを周回する可能性に気づいた。それは上記の可能な解決策ですか?コード例は高く評価されます。
下記のGabrieleの回答に加えて、リクエストごとに新しいAFHTTPClientを回転させないようにすることができます。 –
私はその答えを正確に編集していました。メモをありがとう。 –