Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法将令牌附加到API调用(基本身份验证、AFN网络)_Ios_Objective C_Api_Restkit_Afnetworking - Fatal编程技术网

Ios 无法将令牌附加到API调用(基本身份验证、AFN网络)

Ios 无法将令牌附加到API调用(基本身份验证、AFN网络),ios,objective-c,api,restkit,afnetworking,Ios,Objective C,Api,Restkit,Afnetworking,我在我的项目中使用基本身份验证。为了获取令牌,我发送一个get请求,获取令牌对象,将其存储为NSUserDefault,并且我需要将该令牌附加到我的所有API调用中(当然除了登录) 在AFNetworking/RestKit中使用令牌进行API调用的正确方法是什么 这就是我的令牌对象的外观: response.body={"Id":"84f4faf2","TokenValidity":"1.00:00:00","ValidTo":"2013-11-02T04:24:00.0817221Z","P

我在我的项目中使用基本身份验证。为了获取令牌,我发送一个get请求,获取令牌对象,将其存储为NSUserDefault,并且我需要将该令牌附加到我的所有API调用中(当然除了登录)

在AFNetworking/RestKit中使用令牌进行API调用的正确方法是什么

这就是我的令牌对象的外观:

response.body={"Id":"84f4faf2","TokenValidity":"1.00:00:00","ValidTo":"2013-11-02T04:24:00.0817221Z","Parameters":{"AccountId":"1041"},"Token":"sF6G3czrqZmm70FtDKZxDoNC21tglUvo1+HqraqQU/Y="}
为了获取令牌,我对AFHTTPClient进行了子类化,并按照堆栈溢出问题中的描述进行了令牌调用

当前,我将响应主体存储到id响应对象,设置从该对象创建NSUserDefault并尝试调用它

这是我获得代币的方式

SBAPIManager.h ViewController.m
创建TokenSession对象后,我对TokenSession进行编码,并在进行API调用之前将其与setAuthorizationHeaderWithToken方法一起使用。但我得到一个
[\uu NSCFDictionary dataUsingEncoding:]:发送到实例的无法识别的选择器
错误。因此,在我尝试修复此问题之前,如果有人能告诉我,我的做法是否正确,我将不胜感激。

您接收并存储到用户默认值中的
responseObject
是一个字典(因为您已将AFNetworking配置为自动反序列化JSON)。因此,当您将其用作字符串时,会出现一个异常

您需要完成下载以获取JSON字符串,或者在尝试使用之前需要将字典(
NSJSONSerialization
)重新序列化为字符串

#import "AFHTTPClient.h"
#import <AFNetworking/AFHTTPClient.h>

@interface SBAPIManager : AFHTTPClient
-(void)setUsername:(NSString *)username andPassword:(NSString *)password;
- (void)setAuthorizationHeaderWithToken:(NSString *)token;
+(SBAPIManager *)sharedManager;

@end
#import "SBAPIManager.h"
#import "AFNetworking/AFJSONRequestOperation.h"
#import "AFNetworking/AFNetworkActivityIndicatorManager.h"

@implementation SBAPIManager
#pragma mark - Methods
-(void)setUsername:(NSString *)username andPassword:(NSString *)password
{
    [self clearAuthorizationHeader];
    [self setAuthorizationHeaderWithUsername:username password:password];
}

-(void)setAuthorizationHeaderWithToken:(NSString *)token
{
    [self setAuthorizationHeaderWithToken:token];
}

#pragma mark - initialization
-(id)initWithBaseURL:(NSURL *)url
{
    self = [super initWithBaseURL:url];
    if (!self)
        return nil;
        [self registerHTTPOperationClass:[AFJSONRequestOperation class]];
        [self setDefaultHeader:@"Accept" value:@"application/json"];
        [self setParameterEncoding:AFJSONParameterEncoding];
        [[AFNetworkActivityIndicatorManager sharedManager]setEnabled:YES];

    return self;
}

#pragma mark - singleton methods
+(SBAPIManager *)sharedManager
{
    static dispatch_once_t pred;
    static SBAPIManager *_sharedManager =nil;

    dispatch_once(&pred, ^{_sharedManager =[[self alloc]initWithBaseURL:[NSURL URLWithString:@"https://qstage.azurewebsites.net"]]; });
    return _sharedManager;
}

@end
        [[SBAPIManager sharedManager]setUsername:_nickname andPassword:_StoreIdentifierForVendor];

        [[SBAPIManager sharedManager]getPath:@"/Accounts/Token" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

            NSUserDefaults *TokenSession = [NSUserDefaults standardUserDefaults ];
            [TokenSession setObject:responseObject forKey:@"TOKEN"];

            NSLog(@"JSON");
            NSLog(@"token %@",[self Token]);
        } failure:^(AFHTTPRequestOperation *operation,NSError *error) {
            //Error stuff here
        }];

    } failure:nil];
}