问题:
- (void) getReportSummaryWithCompletionBlock:(void (^)(bool success))success {
NSString *storedToken = [[User sharedUser] accessToken];
NSLog(@"Stored Class: %@",[storedToken class]);
//Logs -- __NSCFString
NSString *constantToken = @"e5c47aa3-c168-480b-a10c-1c4379096fbf";
NSLog(@"Constant Class: %@",[constantToken class]);
//Logs -- __NSCFConstantString
[self.manager.requestSerializer setValue:constantToken forHTTPHeaderField:@"Authorization"];
//[self.manager.requestSerializer setValue:storedToken forHTTPHeaderField:@"Authorization"];
[self.manager GET:someURLString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@",responseObject);
success(YES);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
success(NO);
}];
当我记录storedToken的值时,它会打印 “e5c47aa3-c168-480b-a10c-1c4379096fbf”
并且constantToken打印 e5c47aa3-c168-480b-a10c-1c4379096fbf ,但没有“。
当我使用 constantToken 时,服务器会正确响应,但是当我使用 storedToken 时,服务器响应不正确。
问题:
现在有解决此问题的方法吗?无论如何将NSCFString转换为NSCFConstantString?
提前致谢:)。
答案 0 :(得分:1)
您正在将storedToken
存储为@"\"xxx-yyy-zzz-bla-bla\""
请正确保存或要求服务器向您发送不带双引号的字符串
暂时你可以做的是修剪"
,你也可以用空刺来取代"
,但我不推荐
NSString *goodToken = [storedToken stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\""]];
NSLog(@"%@", goodToken);
这应该被视为临时修复,您应该保存不具有双引号的令牌。请查看代码并找出您获取双引号的原因,可能是您的服务器正在向您发送带双引号的字符串。
答案 1 :(得分:0)
NSString *storedToken = [[User sharedUser] accessToken];
NSString *tokenWithoutQuote = [storedToken stringByReplacingOccurrencesOfString:@"\"" withString:@""];
所以这解决了这个问题。是的,因为 @Inder Kumar Rathore 指向的storedToken存储为@"\"xxx-yyy-zzz-bla-bla\""
答案 2 :(得分:-1)
NSCFConstantString
是NSString
的一个实现,它将字符串数据保存在代码存储区中。
NSCFString
实际上是免费的桥接字符串,可以作为CFString
Land中的Core Foundation
以及NSString
土地中的Objective-C
。
您可以参考NSString Optimizations获取更多参考资料。