2013-09-04 2 views
1

내 REST API에 액세스 할 RestKit을 사용하고 있습니다. 자습서에 나와 있듯이 코드 데이터를 사용하여 내 REST API의 결과를 저장하기로 결정했습니다. 모든 것이 정상이지만 RestKit을 사용하여 기본 인증을 설정하는 데 문제가 있습니다.핵심 데이터로 RestKit에서 기본 인증을 설정하는 방법은 무엇입니까?

RKManagedObjectStore *managedObjectStore = [RKManagedObjectStore defaultStore]; 

RKEntityMapping *entityMapping = [RKEntityMapping mappingForEntityForName:@"Product" inManagedObjectStore:managedObjectStore]; 
    [entityMapping addAttributeMappingsFromDictionary:@{ 
    @"Id":  @"id", 
    @"Category": @"category", 
    @"Name":  @"name", 
    @"Price": @"price"}]; 

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:entityMapping method:RKRequestMethodGET pathPattern:@"/api/products/" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://win8virtual:49876/api/products/"]];  


RKManagedObjectRequestOperation *managedObjectRequestOperation = [[RKManagedObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[ responseDescriptor ]]; 

managedObjectRequestOperation.managedObjectContext = self.managedObjectContext; 

[[NSOperationQueue currentQueue] addOperation:managedObjectRequestOperation]; 

내가 로그인 및 암호 정보를 추가 할 수있는 장소를 찾을 수 없습니다 그래서 나는이 코드가 있습니다. 이 사이트에 대한 몇 가지 답변에서 은 내가 RKObjectManager에 대한 정보를 발견 [[RKObjectManager sharedManager] .HTTPClient setAuthorizationHeaderWithUsername : "1"암호 @ : "1"@];

하지만 어떻게 내 경우에는 그것을 사용하는 방법?

편집 : 나는 해결책을 찾아 냈다. 위의 코드 대신 다음을 사용하십시오.

RKManagedObjectStore *managedObjectStore = [RKManagedObjectStore defaultStore]; 
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://win8virtual:49876"]]; 
    objectManager.managedObjectStore = managedObjectStore; 
[objectManager.HTTPClient setAuthorizationHeaderWithUsername:@"1" password:@"1"]; 
[RKObjectManager setSharedManager:objectManager]; 
RKEntityMapping *entityMapping = [RKEntityMapping mappingForEntityForName:@"Product" inManagedObjectStore:managedObjectStore]; 
    [entityMapping addAttributeMappingsFromDictionary:@{ 
    @"Id":  @"id", 
    @"Category": @"category", 
    @"Name":  @"name", 
    @"Price": @"price"}]; 
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:entityMapping method:RKRequestMethodGET pathPattern:@"/api/products/" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 
// Добавляем описание ответа в менеджер объектов, чтобы он автоматом обрабатывал запросы по url 
    [objectManager addResponseDescriptor:responseDescriptor]; 
// Request! 
[[RKObjectManager sharedManager] getObjectsAtPath:@"/api/products/" parameters:nil success:nil failure:nil]; 

답변

1

해결책을 찾았습니다.

RKManagedObjectStore *managedObjectStore = [RKManagedObjectStore defaultStore]; 
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://win8virtual:49876"]]; 
    objectManager.managedObjectStore = managedObjectStore; 
[objectManager.HTTPClient setAuthorizationHeaderWithUsername:@"1" password:@"1"]; 
[RKObjectManager setSharedManager:objectManager]; 
RKEntityMapping *entityMapping = [RKEntityMapping mappingForEntityForName:@"Product" inManagedObjectStore:managedObjectStore]; 
    [entityMapping addAttributeMappingsFromDictionary:@{ 
    @"Id":  @"id", 
    @"Category": @"category", 
    @"Name":  @"name", 
    @"Price": @"price"}]; 
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:entityMapping method:RKRequestMethodGET pathPattern:@"/api/products/" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 
// Добавляем описание ответа в менеджер объектов, чтобы он автоматом обрабатывал запросы по url 
    [objectManager addResponseDescriptor:responseDescriptor]; 
// Request! 
[[RKObjectManager sharedManager] getObjectsAtPath:@"/api/products/" parameters:nil success:nil failure:nil]; 

주요 아이디어는 모든 요청에 ​​대해 RKObjectManager를 사용하는 대신 코드의 이상이 사용합니다. 자체 포함 된 정보로 요청을 자동으로 생성 할 수 있습니다.

관련 문제