现在几天我正在努力做考古学工作,试图将使用Qt的c ++代码片段翻译成objective-c,它用于发送请求以解析来自服务器的xml作为响应。我真的尝试但无法实现它。如果有人能给我一些帮助。
void RestClient::_prepareRequest( QNetworkRequest& a_request, const QString& a_uri ) {
QSslConfiguration config(QSslConfiguration::defaultConfiguration());
config.setProtocol(QSsl::SslV3);
config.setSslOption(QSsl::SslOptionDisableServerNameIndication, true);
a_request.setSslConfiguration(config);
a_request.setRawHeader("Accept", "application/xml");
a_request.setRawHeader("Content-Type", "application/x-www-form-urlencoded");
QByteArray l_api_key; l_api_key.append( toQString( m_api_key) );
QByteArray l_request_hash;
l_request_hash.append( toQString( _buildRequestHash( toStlString(a_uri) ) ) );
a_request.setRawHeader("EMApikey", l_api_key );
a_request.setRawHeader("EMRequestHash", l_request_hash );
a_request.setUrl( QUrl( a_uri ) );
}
- (NSString *)hmacsha1:(NSString *)data secret:(NSString *)key {
const char *cKey = [key cStringUsingEncoding:NSASCIIStringEncoding];
const char *cData = [data cStringUsingEncoding:NSASCIIStringEncoding];
unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];
NSString *hash = [HMAC base64EncodedStringWithOptions:(nil)];
return hash;
}
这是我的代码:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if ([stories count] == 0) {
NSString * myServerUrl = @"**************";
NSString * l_api_key = @"*******************************";
NSString * l_secret_key = @"************************************";
NSMutableURLRequest *theRequest=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:[myServerUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0];
//do post request for parameter passing
[theRequest setHTTPMethod:@"GET"];
[theRequest setValue:@"xml" forHTTPHeaderField:@"xml"];
[theRequest addValue:@"l_api_key" forHTTPHeaderField: l_api_key];
[theRequest addValue:@"l_request_hash" forHTTPHeaderField:[self hmacsha1:l_api_key secret:l_secret_key]];
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if( theConnection )
{
NSLog(@"we get here !");
NSURL *webData = [[NSMutableData data] retain];
[self parseXMLFileAtURL: webData];
cellSize = CGSizeMake([newsTable bounds].size.width, 60);
}
else
{
NSLog(@"theConnection is NULL");
}
[theConnection release];
}
//cellSize = CGSizeMake([newsTable bounds].size.width, 60);
}
答案 0 :(得分:2)
有了视频游戏开发的背景,通常需要将代码从一种语言/架构移植到另一种语言/架构。有两种方法可以解决这个问题: -
1)取每个函数/类并直接复制代码行。
2)看看系统作为黑盒子做什么,输入和输出并自己编写代码。
通常2号是更好的选择,因为你比其他人更了解你自己的代码,你会以这种方式做得更好,而不是试图去理解另一个开发者的意图可能与他们的实现有什么关系
因此,我建议您只是尝试了解原始代码应该执行的操作,然后在Objective-C中编写您自己的实现。如果这涉及到如何实现它的学习曲线,那么你最好能够研究并学习如何做到这一点。