我正在尝试创建自己的Request类,我打算在整个应用程序中使用它。这是我到目前为止提出的代码。
-(IIWRequest *)initAndLaunchWithDictionnary:(NSDictionary *)dictionnary
{
self=[super init];
if (self) {
// Create the request.
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://xxxxx.com/app/"]];
// Convert data
SBJsonWriter *jsonWriter = [[SBJsonWriter alloc] init];
NSString *jsonData = [jsonWriter stringWithObject:dictionnary];
NSLog(@"jsonData : %@",jsonData);
NSData *requestData = [jsonData dataUsingEncoding: NSUTF8StringEncoding];
request.HTTPBody = requestData;
// This is how we set header fields
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: requestData];
// Create url connection and fire request
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
[self activateNetworkActivityIndicator];
if (connection) {
NSLog(@"Connection");
} else {
NSLog(@"No connection");
}
}
return self;
}
我已经加入了NSURLConnectionDelegate。我想触发连接回调,例如已完成或确实失败回到之前提到的功能。所有这一切的目标是最终只能调用一种方法,如下所示:
-(IIWRequest *)initAndLaunchWithDictionnary:(NSDictionary *)dictionary inBackgroundWithBlock:^(BOOL succeeded){}
有什么想法吗?谢谢!
答案 0 :(得分:1)
我建议你不要使用现有的一个库来调用URL。我所知道的最好的一个是AFNetworking https://github.com/AFNetworking/AFNetworking。有很多例子,它易于使用,我相信你应该顺其自然。
无论如何,如果你想建立自己的课程,我建议你阅读由Kazuki Sakamoto撰写的文章NSURLConnection and grand central dispatch。
问候
答案 1 :(得分:1)
使用NSURLConnection类的块方法,它也会降低你的功能sendAsynchronousRequest:queue:completionHandler:
阅读此doc。
答案 2 :(得分:0)
如果您使用的是iOS 7,我建议您使用NSURLSession
课程,这个新的网络API非常简单。
无论如何,要回答你的问题,你只需要在你的班级中保留回调的引用,并在你从服务器收到一些回复时调用它。
要保留参考,您可以执行以下操作:
// in your .h file
typedef void (^ResponseBlock)(BOOL success);
// in your .m, create a class extension and put declare the block to use it for callback
@interface MyClass ()
{
ResponseBlock callback;
}
// You can store reference using equal like this
- (void)myMethodRequestWithResponseBlock:(ResponseBlock)responseBlock
{
callback = responseBlock;
// statements
}
// And finally, you call back block simple like this:
callback(success);
如果可以的话,再次使用NSURLSession
api,您将简化工作。
我希望这对你有帮助。 干杯!