簡體   English   中英

IOS stringByReplacingOccurrencesOfString返回null

[英]IOS stringByReplacingOccurrencesOfString coming back null

我一直在用力撞牆,這一定是我想念的東西。 在我對base64加密一些加密文本進行編碼之后,才調用此代碼。 在我所說的那點,NSLog簽名始終有效。 但是,有時其余的效果很好,而其他時候removePlus或finalSig返回null。 另外,我正在使用Xcode 4.5,ios6,並且為項目啟用了ARC。 我覺得也許某些東西在我想要發布之前就自動發布了,或者類似的東西。 如果有人有任何想法,將不勝感激。

// Get the data out of the context
char *outputBuffer;
long outputLength = BIO_get_mem_data(context, &outputBuffer);

NSMutableString *signature = [[NSMutableString alloc] init];
[signature appendString:[NSMutableString stringWithCString:outputBuffer encoding:NSASCIIStringEncoding]];

NSLog(@"Base64 Pre Encoded: %@", signature);

signature = [[signature stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding] mutableCopy];
NSMutableString *removePlus = [[signature stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"] mutableCopy];
NSString *finalSig = [removePlus stringByReplacingOccurrencesOfString:@"=" withString:@"%3D"];

//now we create the url request portion
NSMutableString *variables = [[NSMutableString alloc] init];

//set the variables we're going
[variables appendString:finalSig];

嘗試將代碼替換為以下代碼,因為我想它會確切顯示問題出在哪里:

// Get the data out of the context
char *outputBuffer;
long outputLength = BIO_get_mem_data(context, &outputBuffer);

outputBuffer[outputLength] = '\0';
if(outputLength != strlen(outputBuffer)) NSLog(@"SOMETHING VERY WRONG");

NSString * signature = [NSString stringWithCString:outputBuffer encoding:NSASCIIStringEncoding]];
NSLog(@"Base64 Pre Encoded: %@", signature);

signature = [[signature stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSLog(@"Base64 Post Encoded: %@", signature);

signature = [signature stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"];
NSLog(@"Base64 Remove '+': %@", signature);

signature = [removePlus stringByReplacingOccurrencesOfString:@"=" withString:@"%3D"];
NSLog(@"Base64 Remove '=': %@", signature);

//now we create the url request portion
NSMutableString *variables = [NSMutableString alloc] initWithString:signature];

…

//set the variables we're going
[variables appendString:finalSig];

原來是NSString *簽名= [NSString stringWithCString:outputBuffer編碼:NSASCIIStringEncoding]]; 需要以null結尾的字符串,而我的字符串不是。 無論如何,這是創建字符串的更有效方法:

NSData *myRequestData = [ NSData dataWithBytes: [ variables UTF8String ] length: [ variables length ] ];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM