objective-c - 在命令行中打开的 MacCatalyst 应用程序中发送 HTTP 请求
问题描述
我有一个 MacCatalyst 应用程序,它可以通过两种方式工作:
- 作为带有 GUI 的经典应用程序
- 作为没有 GUI 的命令行应用程序
当应用程序在命令行中启动时,我需要向 API 发出 HTTP 请求。但是,这不起作用,我不知道为什么。
这是我的案例的简化示例(我的应用程序是用 Objective C 编写的)
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
if(argc >= 2 && [condition on argv[1]]){
@try {
NSURL* requestUrl = [NSURL URLWithString:@"https://google.com"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:requestUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setHTTPMethod:@"GET"];
NSURLSessionDataTask *dataTask = [[NSURLSession sharedSession] dataTaskWithRequest: request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// never called
fprintf(stdout, "%s", [@"Request Complete" UTF8String]);
if (error != nil) {
// return error
return;
}
// use data
}];
[dataTask resume];
}@catch(NSException* e) {
fprintf(stdout, "%s", [@"Exception" UTF8String]); // never called
}@catch(NSError*e) {
fprintf(stdout, "%s", [@"Error" UTF8String]); // never called
}
} else {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
}
在上述情况下,dataTask completionHandler 从未被调用,没有抛出异常或错误,我在控制台中没有收到错误,脚本只是在 [dataTask resume] 之后停止。
我还尝试使用委托和使用后台会话来处理上传或下载任务,但它们都没有工作,也没有抛出任何错误,也没有提供任何关于什么不工作或不允许什么的信息。使用委托时,不会调用任何委托回调。
有谁知道发生了什么?
解决方案
推荐阅读
- sql - 如何按状态对两个不相关表中的值进行汇总
- database - 如何在保持面包屑顺序的同时标准化面包屑路径?
- ruby-on-rails - 使用会话将参数值传递给另一个控制器
- python - 从一列中获取值作为减法变量
- c# - Linq Group By 和合并行
- apache-zookeeper - Curator Framework 设置的会话超时
- javascript - 更改表上元素的标题
- flutter - 如何为 BottomNavigationBar 设置背景颜色
- fullcalendar - 除非某个单词在标题完整日历中,否则阻止用户创建事件
- python - 如何模拟 PythonOperator 的 python_callable 和 on_failure_callback?