Как обернуть вызовы ресткита в сервисный класс и интегрировать в контроллер?

Я только начинаю изучать Objective-C, и мне нужна помощь с этим классом обслуживания, который я хочу написать.

Я хочу создать класс APIService, который использует ресткит и возвращает ответы.

Похоже, что ресткит основан на блоках, поэтому, когда вызов http возвращается, анализирует json и возвращает результирующую коллекцию, мне нужно каким-то образом заставить мои методы APIService возвращать ответ.

Я ищу помощь по скелетной структуре этого сервиса, так как я новичок в Objective-C и Restkit (который использует блоки).

Я смотрю на этот пример, который я хочу настроить в своем собственном классе APIService:

https://github.com/RestKit/RestKit/blob/development/Examples/RKTwitter/Classes/RKTwitterViewController.m#L18

- (void)loadTimeline
{
    // Load the object model via RestKit
    RKObjectManager *objectManager = [RKObjectManager sharedManager];

    [objectManager getObjectsAtPath:@"/status/user_timeline/RestKit"
                         parameters:nil
                            success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
                              NSArray* statuses = [mappingResult array];
                              NSLog(@"Loaded statuses: %@", statuses);
                              _statuses = statuses;
                              if(self.isViewLoaded)
                                [_tableView reloadData];
                            }
                            failure:^(RKObjectRequestOperation *operation, NSError *error) {
                              UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                                               message:[error localizedDescription]
                                                                              delegate:nil
                                                                     cancelButtonTitle:@"OK"
                                                                     otherButtonTitles:nil];
                              [alert show];
                              NSLog(@"Hit error: %@", error);
                            }];
}

Может ли кто-нибудь помочь мне конкретизировать эту скелетную структуру с вызовом метода, подобным временной шкале, вот что у меня есть сейчас:

@interface MyApiService : NSObject
{
  @property (nonatomic, strong, readwrite) RKObjectManager *rkObjectManager;
  - (id)initWithRKObjectManager:(RKObjectManager *)rkObjectManager;
  - (NSArray) loadTimeline:
}

@implementation MyApiService 
{
  - (id)initWithRKObjectManager:(RKObjectManager *)rkObjectManager
  {
     self = [super init];
     if(self) {
       self.rkObjectManager = rkObjectManager;
       // ...

     }
  }


  // how to define method for loadTimelines when the call returns using a block?
}

Тогда я буду использовать это так:

// Initialize RestKit
RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];
MyAPiService *service = [[MyApiService alloc] initWithRKObjectManager: objectManager];

NSArray *statuses = [service loadTimeLine];

Но не уверен, что именно так я буду вызывать loadTimeLine, поскольку ресткит снова использует блоки??


person Blankman    schedule 20.05.2013    source источник


Ответы (1)


RestKit также использует делегатов. Вот как я делаю:

Импортируйте #import <RestKit/RestKit.h> в свой файл .h.

Реализовать делегат RKObjectLoaderDelegate

Загрузите объекты из сервиса, подобного этому.

RKObjectManager *manager = [RKObjectManager sharedManager];
[manager loadObjectsAtResourcePath:@"//status/user_timeline/RestKit" delegate:self];

Реализуйте методы делегата:

- (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects {
// Do whatever with objects here...
}

- (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error {
    NSLog(@"Error POSTing object : %@", error);
}

Есть много полезных методов делегата для RKObjectLoaderDelegate.

Вы можете ознакомиться с хорошим руководством по RestKit здесь.

person Khawar    schedule 21.05.2013