Я пытаюсь опубликовать некоторые данные (токен аутентификации для конкретного сайта) с помощью RESTKit, и у меня возникли проблемы. Каждый раз, когда я запускаю метод, я получаю это:Не удается выполнить запрос POST с RESTKit
Кроме того, есть много «Несовместимые типов указателей» предупреждения в коде.
Вот мой метод, который является действительно уродливым и плохим, и я бы хотел, чтобы какая-то помощь была исправлена. Я делаю [self postToken]
внутри метода IBAction при нажатии кнопки. Я получаю переменную userAuthToken из другого файла, где он устанавливается с помощью json-ответа из запроса POST, не использующего RESTKit. Я в конечном итоге преобразую этот POST в RESTKit, когда знаю, как успешно. Метод «userAuthTokenMethod» находится в том же файле, что и метод postToken, и позволяет мне использовать объект userAuthToken, который инициализируется в AppDelegate, поэтому он действует как глобальная переменная.
- (void)postToken
{
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Login class]];
[mapping addAttributeMappingsFromDictionary:@{@"token": @"token"}];
NSIndexSet *statusCodeSet = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful);
RKResponseDescriptor *tokenResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping method:nil pathPattern:nil keyPath:nil statusCodes:statusCodeSet];
RKRequestDescriptor *tokenRequestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:mapping objectClass:self rootKeyPath:nil method:nil];
[[RKObjectManager sharedManager] addRequestDescriptor:tokenRequestDescriptor];
RKObjectManager *tokenManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"https://websitetest.com/doctors/find"]];
[tokenManager addResponseDescriptor:tokenResponseDescriptor];
[tokenManager addRequestDescriptor:tokenRequestDescriptor];
[tokenManager postObject:[[self userAuthTokenMethod] userAuthToken] path:nil parameters:nil success:nil failure:nil];
NSURL *tokenURL = [NSString stringWithFormat:@"https://websitetest.com/doctors/find?name=%@&location=%@",nameIDTextField.text, locationTextField.text];
NSMutableURLRequest *tokenRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:tokenURL]];
RKObjectManager *tokenObjectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:tokenURL]];
[tokenObjectManager.HTTPClient setDefaultHeader:@"Auth-Token" value:[[self network360Edge] userAuthToken]];
RKObjectRequestOperation *tokenOperation = [[RKObjectRequestOperation alloc] initWithRequest:tokenRequest responseDescriptors:@[tokenResponseDescriptor]];
NSLog(@"Token being POSTed ==> %@", [[self userAuthTokenMethod] userAuthToken]);
[tokenOperation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *result){
NSLog(@"Response for POST request with token ==> %@", [result array]);
}failure:nil];
[tokenOperation start];
}
Вот код для моего файла поставщика отображения называется MappingProvider:
//MappingProvider.h
#import <Foundation/Foundation.h>
#import <RestKit/RestKit.h>
@interface MappingProvider : NSObject
+(RKMapping *)tokenMapping;
@end
//MappingProvider.m
#import "MappingProvider.h"
#import <RestKit/RestKit.h>
#import "Login.h"
@implementation MappingProvider
+(RKMapping *)tokenMapping
{
RKObjectMapping *tokenMapping = [RKObjectMapping mappingForClass:[Login class]];
[tokenMapping addAttributeMappingsFromArray:@[@"token"]];
return tokenMapping;
}
@end
Вот код для входа в файл, в котором 'маркер' инициализируется:
//Login.h
#import <Foundation/Foundation.h>
@interface Login : NSObject
@property (nonatomic, copy)NSString *token;
@end
Я m очень новый для RESTKit и несколько новый с Objective-C (я кодировал его около месяца). Я был бы признателен за помощь в исправлении моего кода.
Я думаю, что вы не должны использовать ноль вместо ключевого ресурса в ResponseDescriptor. Скорее вы можете использовать пустую строку. И попробуйте установить метод запроса в ResponseDescriptor как RKRequestMethodPOST/GET, если применимо. Более того, поскольку RKObjectManager является общим классом, вы добавляете к нему один и тот же дескриптор дескриптора, добавляя дескрипторы в RKObjectManager и TokenManager. – execv
Удалите строку, которая добавляет tokenRequestDescriptor в [RKObjectManager sharedManager]. – execv
У меня есть такая же проблема с тобой, я хочу знать, была ли у тебя проблема решена? – Songlin