для использования RKObjectManager вы создаете экземпляр только при вызове метода objectManagerWithBaseURL. В вашем приложении Delegate.
RKObjectManager * restKitManager = [RKObjectManager objectManagerWithBaseURL:@"http://toto/v1/ui"];
После того, как вы можете использовать [RKObjectManager sharedManager] для доступа к менеджеру, просто импортируйте RestKit в ваш объект, где вы хотите его использовать:
[RKObjectManager sharedManager].serializationMIMEType = RKMIMETypeJSON;
Лично я создаю Объект только для управления отображением, и я могу дать вам пример для моего метода отображения входа в систему:
-(void)mappingLogin
{
log_debug("mappingLogin")
RKObjectMapping * userMapping = [RKObjectMapping mappingForClass:[VOUser class]];
[userMapping mapKeyPath:@"id" toAttribute:@"identifier"];
[userMapping mapKeyPath:@"ref" toAttribute:@"ref"];
[userMapping mapKeyPath:@"login" toAttribute:@"login"];
[userMapping mapKeyPath:@"mail" toAttribute:@"mail"];
RKObjectMapping * gatewayMapping = [RKObjectMapping mappingForClass:[VOGateway class]];
[gatewayMapping mapKeyPath:@"id" toAttribute:@"identifier"];
[gatewayMapping mapKeyPath:@"serial" toAttribute:@"serial"];
[gatewayMapping mapKeyPath:@"status" toAttribute:@"status"];
RKObjectMapping * authReturnMapping = [RKObjectMapping mappingForClass:[VOAuth class]];
[authReturnMapping mapKeyPath:@"sessionId" toAttribute:@"sessionId"];
[authReturnMapping mapKeyPath:@"user" toRelationship:@"user" withMapping:userMapping];
[authReturnMapping mapKeyPath:@"gateway" toRelationship:@"gateway" withMapping:gatewayMapping];
[[RKObjectManager sharedManager].mappingProvider setMapping:authReturnMapping forKeyPath:@""];
}
Если вы видите последнюю строку, вы видите, что я использую [RKObjectManager sharedManager] для установки своего отображения, я не создаю другой экземпляр.
Это зависит от структуры кода, но я не использую напрямую restik в моем viewsController, но у меня есть слой, который управляет RestKit, на мой взгляд, я вызываю методы, соответствующие resouces.
Если вы хотите уточнить некоторые моменты, скажите мне. (Если вам нужна помощь для конкретных деталей объекта, которые вы хотите отобразить).
Изменить на другие вопросы:
1) Пример использования возвращаемых объектов:
- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects {
log_debug("##### BackEnd - %@ - %i #####",objectLoader.resourcePath,objectLoader.response.statusCode)
if ([objectLoader.response isSuccessful]) {
if ([objectLoader wasSentToResourcePath:@"/auth"]) {
VOAuth * auth = [objects objectAtIndex:0];
[BESessionManager getInstance].auth = auth;
[[NSNotificationCenter defaultCenter] postNotificationName:kSuccessLoginPostLogin object: nil];
} else if ([objectLoader wasSentToResourcePath:@"/list1/0"]) {
log_debug("count %i",[objects count])
}
}
}
- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error {
log_debug("!!!!! BackEnd - %@ - %i !!!!!",objectLoader.resourcePath,objectLoader.response.statusCode)
if ([objectLoader wasSentToResourcePath:@"/auth"]) {
[[NSNotificationCenter defaultCenter] postNotificationName:kErrorLoginPostLogin object: nil];
}
}
2) Для использования [RKObjectManager sharedManager] импортируйте API в свой объект .h
#import <RestKit/RestKit.h>
Редактировать @Neruja Джозеф:
BESessionManager - это мой менеджер данных, в котором я храню все данные, загруженные Restkit. Этот объект-одиночка. Таким образом, единственный экземпляр этого объекта может быть доступен во всех моих представлениях, если я импортирую этот:
импорт "BESessionManager.h"
Итак, в моей функции обратного вызова я сохраняю данные в моем BESessionManager, и когда это делается, я отправляю уведомление от моей функции обратного вызова:
[[NSNotificationCenter defaultCenter] postNotificationName: объект kSuccessLoginPostLogin: ноль];
На мой взгляд, кому нужно отображать данные или использовать данные, я беру это по порядку:
1 - Если я впервые использую restkit, при запуске приложения я запускаю свой менеджер restKit с «отображением» «сериализации» и глобальными параметрами, такими как baseUrl, CertificateValidation, сериализацияMIMEType, конфигурация журнала, ... есть мой BERestKitConfig, который тоже синглтон.
2 - Если у меня есть службы для входа, у меня есть еще один синглтон с именем BEServiceUser, в этом я добавляю метод для каждой связанной службы для входа в систему. Мы можем иметь - (void) postLogIn - (void) getLogout - (void) getUserInfo ...
#import <Foundation/Foundation.h>
// Mandatory class for services
#import <RestKit/RestKit.h>
#import "BESessionManager.h"
#import "BERestKitConfig.h"
// Value Objects
#import "VOUser.h"
#import "VOGateway.h"
#import "VOAuth.h"
// Send Objects
#import "SOAuth.h"
@interface BEServiceUser : NSObject <RKObjectLoaderDelegate> {
SOAuth * logObj;
}
@property (nonatomic, retain) SOAuth * logObj;
//Singleton
+(BEServiceUser *)getInstance;
+(void)resetInstance;
// CallBack
-(void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects;
-(void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error;
// Services
-(void)postLogin:(NSString*)login withPassword:(NSString*)password;
-(void)getLogout;
@end
для примера в моем viewDidLoad:
[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(onLoginSuccess) name: kSuccessLoginPostLogin object: nil];
[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(onLoginError) name: kErrorLoginPostLogin object: nil];
[[BEServiceUser getInstance] postLogin:@"toto" withPassword:@"toto"];
3 - если хороший результат, метод onLoginSuccess вызывается на мой взгляд. Таким образом, я могу взять данные в моем представлении от моего менеджера сеанса как это:
[BESessionManager getInstance].auth;