2011-12-22 3 views
1

신의 질문에 미리 감사 드리며 사과드립니다.RestKit 0.9.3 app 구조

저는 restkit 및 ios 개발에 익숙합니다.

내 질문 엔티티 매핑을 어디에 두어야합니까?

에서 appdelegate .. 나는 이것을하는 방법을 알고 있지만 어떻게하면 어떤 viewcontroler에서 개체 매핑에 액세스 할 수 있습니다.

또한 객체에서 매핑을 시도했지만 RKobject가 더 이상 사용되지 않으므로 NSObject에서 확장해야합니다. {하지만이 접근법을 사용하여 매핑을 어디에 두어야할지 잘 모릅니다.

또한 RKObjectManager를 넣을 최적의 위치는 모든 뷰 컨트롤러에 새 인스턴스를 만들어야합니까?

희망 사항을 매핑 작업과 함께 특별히 도와주세요.

답변

1

RKObjectManager를 사용하는 경우 objectManagerWithBaseURL 메서드를 호출 할 때만 인스턴스를 만듭니다. appDelegate에서. 당신이 개체에 희망이 그것을 사용하는 경우

RKObjectManager * restKitManager = [RKObjectManager objectManagerWithBaseURL:@"http://toto/v1/ui"]; 

액세스 매니저 [RKObjectManager sharedManager]를 사용할 수 있습니다 후, 단지 RestKit를 가져옵니다 개인적으로

[RKObjectManager sharedManager].serializationMIMEType = RKMIMETypeJSON; 

나는 개체 그냥 매핑을 관리 할 수 ​​있도록, 그리고 내 로그인 매핑 메도 당신에게 exemple를 제공 ​​할 수 있습니다 : 당신이 마지막 줄이 표시되는 경우

-(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]를 내 매핑을 설정하는 데 사용할 것을 볼 수있다, 나는 만들지 마십시오 다른 인스턴스.

코드의 구조에 따라 다르지만 직접 viewsikitor에서 restik을 사용하지는 않지만 RestKit을 관리하는 레이어가 있습니다. 내보기에서 resouces에 해당하는 메서드를 호출합니다.

몇 가지 점을 명확히하려면 말해주십시오. (특정 exemple 세부 객체에 대해 도움이 필요한 경우 매핑하려는 객체). 다른 질문에 대한

편집 : 반환 된 객체의 사용

1) Exemple :

- (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,

#import <RestKit/RestKit.h> 
.H 개체에서 수입 API

@Neruja Joseph 편집 :

  • BESessionManager는 Restkit에서로드 한 모든 데이터를 보관하는 내 데이터 관리자입니다. 이 객체는 싱글 톤입니다. 따라서이 객체를 가져 오면이 객체의 단일 인스턴스는 모든 뷰에서 접근 할 수 있습니다 :

    import "BESessionManager.시간 "

  • 그래서, 내 콜백 함수 내 BESessionManager에 데이터를 저장하고이 끝나면, 내 콜백 함수에서 통지를 보내

    [[NSNotificationCenter defaultCenter] postNotificationName : kSuccessLoginPostLogin 대상 : 전무]

    데이터를 표시하거나 데이터를 사용할 필요가 내 시야에서
  • 나는 위해이 걸릴 :

1 - 내가 처음 restkit를 사용하는 경우, 내가 응용 프로그램을 시작할 때, 나는 나의 restKit 관리자를 초기화하기 w i '매핑', 'serialization'및 전역 옵션 (baseUrl, certificatValidation, serializationMIMEType, 로그 구성) ... 내 BERestKitConfig 역시 싱글 톤입니다.

2 - 로그인 서비스가있는 경우 BEServiceUser라는 또 다른 싱글 톤이 있습니다. 여기서는 로그인을 위해 각 관련 서비스에 대한 메소드를 추가합니다.

[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 방법은 다음과 같습니다 (무효)가 postLogIn - - - (무효) getLogout (무효) getUserInfo ... 내있는 viewDidLoad에서 exemple에 대한

#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 

우리는 할 수 있습니다 내 견해로 불렸다. 그래서 내 세션 관리자에서 내보기에서 데이터를 걸릴 수 있습니다 :

[BESessionManager getInstance].auth; 
+0

안녕하세요 꽤 감사합니다. 당신은 예를 들어, restkit 응답을 얻는 방법보기) : - (무효) objectLoader : (RKObjectLoader *) objectLoader didLoadObjects : 다음 내 AppDelegate에있는 [RKObjectManager sharedManager]를 사용하는 경우 (NSArray를 *)는 그래서 및 객체 내 viewcontrollers restkit.h 가져올 수있는 올바른 있습니까? .. 감사합니다 !!! – IturPablo

+0

첫 번째 질문 : 내 sessionManager에서 리턴 된 객체를 누가 싱글 톤으로 저장했는지, notifaction을 보냅니다. 내 viewController가이 알림을 받으면 메소드를 호출하여 내 sessionManager의 데이터를 검색합니다. – Beber

+0

viewController에서 [RKObjectManager sharedManager]를 사용하려면 ExempleViewController.h에서 #import 를 추가하십시오. – Beber