저는 Objective-C를 다소 새로 도입했습니다. 클라이언트 인증서 인증이 필요한 사이트에서 파일을 다운로드하는 PERL 스크립트가 있습니다. PERL의 스크립트를 Objective-C 명령 줄 도구로 이식하여 터미널에서 실행할 수 있습니다. 내 연구를 토대로 NSURLSession이 내가해야 할 일을해야한다고 결론을 내렸다. 그러나 NSURLSession을 명령 줄 도구로 사용할 수 없습니다. 그것은 오류없이 괜찮아 질 것 같지만 completionHandler에서 아무 것도 반환하지 않습니다. 또한이 코드를 Mac OS X App 도구에 넣었습니다. 제대로 작동하는 것 같습니다. 당신이 볼 수 있듯이명령 줄 도구로 실행할 때 NSURLSession이 completionHandler를 처리하도록하려면 어떻게해야합니까?
#import "RBC_ConnectDelegate.h"
@implementation RBC_ConnectDelegate
- (void)GetURL2:(NSURL *)myURL2{
//create semaphore
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
// Create the request.
NSLog(@"Creating Request");
NSURLRequest *theRequest =
[NSURLRequest requestWithURL:myURL2
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval:10.0];
NSLog(@"Creating Session");
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: nil delegateQueue: [NSOperationQueue mainQueue]];
NSLog(@"Initializing Data Task");
NSURLSessionDataTask * dataTask = [defaultSession dataTaskWithRequest:theRequest
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"CompletionHandler");
if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
NSInteger myStatusCode = [(NSHTTPURLResponse *) response statusCode];
NSLog(@"Status Code: %ld", (long)myStatusCode);
}
if(error == nil)
{
NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog(@"Data = %@",text);
}
else
{
NSLog(@"Error");
}
dispatch_semaphore_signal(semaphore);
}];
NSLog(@"Resuming Data Task");
[dataTask resume];
}
@end
: 내 구현 파일 여기
#import <Foundation/Foundation.h>
@interface RBC_ConnectDelegate : NSObject
- (void)GetURL2:(NSURL *)myURL;
@property(nonatomic,assign) NSMutableData *receivedData;
//<==== note use assign, not retain
//do not release receivedData in a the dealloc method!
@end
된다 : 여기
#import <Foundation/Foundation.h>
#import "RBC_ConnectDelegate.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
// insert code here...
NSURL *myURL =[NSURL URLWithString:@"http://google.com"];
//[[[RBC_Connect alloc] init] connectGetURLSynch];
RBC_ConnectDelegate *myConnect = [[RBC_ConnectDelegate alloc] init];
[myConnect GetURL2: myURL];
}
return 0;
}
내 구현 파일입니다 : 여기
내 main.m 파일입니다 , 나는 처음에 여기에서 일하는 아주 간단한 것을 얻고 자 노력하고있다. NSURLSession이 비동기 적으로 실행된다는 사실과 관련이있을 수도 있지만 명령 줄 도구를 작성할 때이 문제를 해결하는 방법을 구체적으로 설명하는 솔루션을 찾을 수 없었습니다. 누구든지 제공 할 수있는 방향으로 인정 될 것입니다.
환호,