1

RestKit を使用して REST API にアクセスしています。チュートリアルで示したように、REST API からの結果を保存するために Code Data を使用することにしました。すべて問題ありませんが、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" password:@"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];
4

1 に答える 1