RestKit Object Mapping из JSON - PullRequest
1 голос
/ 29 марта 2012

Я пытаюсь создать сопоставление для следующих данных JSON.

{
  "Calls": [
    {
      "id": "18",
      "parent_id": "0",
      "status": "completed",
    },
    {
      "id": "19",
      "parent_id": "0",
      "status": "completed",
    },
}

Я использую следующие методы для сопоставления и обработки ответа от делегата. Когда я запускаю это, метод didLoadObjects никогда не срабатывает и ничего не регистрируется. Кроме того, я уверен, что URL-адрес правильный, и он возвращает JSON, который я разместил выше.

- (void)viewDidLoad
{
    [super viewDidLoad];

    RKLogConfigureByName("RestKit/*", RKLogLevelTrace);

    RKObjectMapping *callMapping = [RKObjectMapping mappingForClass:[YCMDCall class]];

    [callMapping mapKeyPath:@"id" toAttribute:@"call_id"];
    [callMapping mapKeyPath:@"parent_id" toAttribute:@"parent_id"];
    [callMapping mapKeyPath:@"status" toAttribute:@"status"];

    RKObjectManager *manager = [[RKObjectManager sharedManager] managerWithBaseURL:@"http://MYBASEURL/"];
    [manager.mappingProvider setMapping:callMapping forKeyPath:@"Calls"];
    [manager loadObjectsAtResourcePath:@"RESTOFURL" objectMapping:callMapping delegate:self];
}

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects
{
    NSLog(@"Load collection of Articles: %@", objects);
}

- (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error
{
    NSLog(@"Oh no! Error: %@", [error localizedDescription]);
}

Кроме того, если кто-то может предоставить пример или указать мне правильное направление для импорта этих результатов в TableViewController. Заранее спасибо за любую помощь.

@interface YCMDCall : NSObject

@property (nonatomic, retain) NSString* call_id;
@property (nonatomic, retain) NSNumber* parent_id;
@property (nonatomic, retain) NSString* status;

@end



@implementation YCMDCall

@synthesize call_id;
@synthesize parent_id;
@synthesize status;

@end

1 Ответ

2 голосов
/ 29 марта 2012

Вы можете сохранить повторно NSArray в объекте сеанса, который является одноэлементным, а затем опубликовать уведомление:

[MySessionObject getInstance].list = objects;
[[NSNotificationCenter defaultCenter] postNotificationName:@"YCMDCallSuccess" object: nil];

По вашему мнению, вы можете наблюдать это уведомление:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onYCMDCallSuccess) name:@"YCMDCallSuccess" object:nil];

В вашем методе onYCMDCallSuccess вы можете получить доступ к данным в вашем объекте сеанса

// For exemple
self.myList=[MySessionObject getInstance].list;

Вы можете увидеть это сообщение для более подробной информации: RestKit 0.9.3 Структура приложения

Надеюсь, это поможет вам.

Редактировать: Если ваш вызов находится непосредственно в вашем контроллере представления, посмотрите, добавили ли вы RKObjectLoaderDelegate

 @interface MyTableViewController : UITableViewController <RKObjectLoaderDelegate>

Если нет, Ваши функции обратного вызова никогда не будут вызываться:

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects;
- (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error;
...