2011-12-22 16 views
1

newbiの質問があるので、事前に感謝して申し訳ありません。RestKit 0.9.3 app structure

私はrestkitとiosの開発に新しいです。

私の質問エンティティのマッピングをどこに置くか。

私はこれを行う方法を知っていますが、次にどのように私は任意のviewcontrolerからオブジェクトマッピングにアクセスできます。

私はオブジェクト内でマッピングをしようとしましたが、RKobjectは廃止されました。したがって、NSObjectから拡張する必要があります。{しかし、このアプローチでマッピングをどこに置くべきかはわかりません。

また、RKObjectManagerを配置する場所はどこですか。すべてのビューコントロールで新しいインスタンスを作成する必要がありますか?

あなたは私がマッピングのものを特別に手伝ってくれることを願っています。

答えて

1

RKObjectManagerを使用する場合は、objectManagerWithBaseURLメソッドを呼び出すときにのみインスタンスを作成します。あなたのappDelegateで。

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

あなたは自分の希望は、それを使用します。ここで、オブジェクトあなたにRestKitをインポートし、マネージャにアクセスするには、[RKObjectManager sharedManager]を使用することができた後:

[RKObjectManager sharedManager].serializationMIMEType = RKMIMETypeJSON; 
個人的に

私はただのマッピングを管理するためのオブジェクトを作成し、Iあなたは私が私のマッピングを設定するには、[RKObjectManager sharedManager]を使用していることがわかります最後の行が表示されている場合は、私が作成していない

-(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:@""]; 

} 

:あなたは私のログインマッピングMethodeのためexempleを与えることができます他の例。

それはコードの構造に依存しますが、私は自分のviewsControllerで直接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。H」

  • だから、私のコールバック関数の中で、私は私のBESessionManagerにデータを保存し、それが終了したとき、私は私のコールバック関数からの通知を送信します。

    [[NSNotificationCenter defaultCenter] postNotificationName:kSuccessLoginPostLoginオブジェクト:nilを];

    データを表示したり、データを使用する必要が私の見解では
  • 私は順番にこれを取る:

1 - 私が初めてrestkitを使用している場合は、私はアプリを起動したとき、私は私のrestKitマネージャを初期化w i 'マッピング'、 'シリアライズ'、グローバルオプションはbaseUrl、certificatValidation、serializationMIMEType、ログ設定などです。シングルトンのBERestKitConfigもあります。

2 - 私はログインのためのサービスを持っている場合、私はBEServiceUserという名前の別のシングルトンを持っています。ここでは、ログインに関連するサービスごとにメソッドを追加します。我々は持つことができます - (無効)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 

[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方法があります私の意見で呼ばれた。だから私はこのように私のセッションマネージャからの私のビューのデータを取ることができます。

​​
+0

こんにちはあなたは層にrestkitのすべてのビジネスロジックを持っている場合(ないでかなり明確感謝U =)、質問だけのカップルであり、あなたはどのようにrestkitレスポンスを得るのですか? - (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects AND 私のappdelegateで[RKObjectManager sharedManager]を使用すると、私のviewcontrollers私はrestkit.hをインポートする必要があります正しいですか?.. ありがとう! – IturPablo

+0

最初の質問の場合: 返されたオブジェクトをsessionManagerでシングルトンにすると、notifactionが送信されます。私のviewControllerがこの通知を受け取ると、methodeが呼び出され、sessionManagerのデータが検索されます。 – Beber

+0

あなたのviewControllerで[RKObjectManager sharedManager]を使用するにはExempleViewController.hの#import を追加してください。 – Beber