2012-01-18 15 views
1

私はrestKitを初めて使用しています。私は 私のウェブ json/xmlを使用して投稿要求を送信する方法を理解していないと私のクラスで受信応答をマップします。いずれにしても、私には助けを与えることができます。 私applicationDelegateに私はベースURLを提供RKObjectManager をインスタンス化しています ::私は使用していたコードはこれですポストを送信し、オブジェクトに応答を要求し、応答を割り当てます。

RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:@"https://example.com/services/"]; 

    // Request params in Dictionary 
    NSArray *objects = [NSArray arrayWithObjects: email, password, 
nil]; 
    NSArray *keys = [NSArray arrayWithObjects:@"username", 
@"password", nil]; 
    NSDictionary *params = [NSDictionary dictionaryWithObjects:objects 
forKeys:keys]; 
    NSLog(@"Manager: %@", [RKObjectManager 
sharedManager].description); 
    // User object Mapping 
    RKObjectMapping* userMapping = [RKObjectMapping mappingForClass: 
[User class]]; 
    [userMapping mapKeyPath:@"userName" toAttribute:@"userName"]; 
    [userMapping mapKeyPath:@"lastName" toAttribute:@"lastName"]; 
    [userMapping mapKeyPath:@"active" toAttribute:@"active"]; 
    [[RKObjectManager sharedManager].mappingProvider 
setMapping:userMapping forKeyPath:@"user"]; 
    [[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/ 
login" delegate:self]; 

ポストがサーバにログイン/に送信されると、有効なJSON を返送して、マップする必要がありますそのjsonをUserクラスに追加します。

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

- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError: 
(NSError *)error 
{ 
    NSLog(@"Objecy Loader failed: %@", error); 
} 

- (void)request:(RKRequest *)request didFailLoadWithError:(NSError 
*)error 
{ 
    NSLog(@"Request failed"); 
} 

- (void)request:(RKRequest*)request didLoadResponse: 
(RKResponse*)response { 
    if ([request isGET]) { 
     // Handling GET /foo.xml 
     if ([response isOK]) { 
      // Success! Let's take a look at the data 
      NSLog(@"Retrieved XML: %@", [response bodyAsString]); 
     } 
    } else if ([request isPOST]) { 
     // Handling POST /other.json 
     if ([response isXML]) { 
     ///NSLog(@"Seng a JSON request:! \n %@", [request 
HTTPBodyString]); 
      NSLog(@"Got a responce! \n %@", [response bodyAsString]); 
     } 
    } else if ([request isDELETE]) { 
     // Handling DELETE /missing_resource.txt 
     if ([response isNotFound]) { 
      NSLog(@"The resource path '%@' was not found.", [request 
resourcePath]); 
     } 
    } 
} 

私はそれobjectLoaderメソッド実行トリガされていない、restkitの私の 理解は

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/login" 
delegate:self]; 

が実行されたときにそれらが呼び出されるべきであるということですか?すべてのヘルプは高く評価され:)

答えて

1

あなたは(あなたが巻き込まれるデリゲートを持って、これまでまたは場所)、そのユーザクラスにrestkitのためのデリゲートを設定するために覚えてなかった

@interface User : NSObject<RKObjectLoaderDelegate>{ 
} 

であなたはおそらくなかったが、包み言及その価値:P

この行に渡される自分はそのクラスですか?

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/ 
login" delegate:self]; 

も、私はあると投稿用に設定マッピングを追加するための新しい方法を再度編集

[sharedManager.mappingProvider addObjectMapping:userMapping]; 
[sharedManager.mappingProvider setMapping:userMapping forKeyPath:@"/somepath"]; 

[sharedManager.mappingProvider setSerializationMapping:[userMapping inverseMapping] forClass:[User class]]; 
// Must set the router up to handle posts 
[sharedManager.router routeClass:[User class] toResourcePath:@"/api/users" forMethod:RKRequestMethodPOST]; 

だと思う。そして、このようにローダーを使用して記事を作成します。おそらく、すべての上には、やって何のために殺しても外観

RKObjectLoader* loader = [RKObjectLoader loaderWithResourcePath:url objectManager:self.objectManager delegate:self.currentDelegate]; 
    loader.method = RKRequestMethodPOST; 
    loader.sourceObject = self; 
    loader.targetObject = self; 

    loader.serializationMIMEType = self.objectManager.serializationMIMEType; 
    loader.serializationMapping = [self.objectManager.mappingProvider serializationMappingForClass:self.mappingClass]; 

    loader.objectMapping = [self.objectManager.mappingProvider objectMappingForClass:self.mappingClass]; 

    [loader send]; //<<the actual post 
+0

はいメソッドを持つクラスは、RKObjectLoaderDelegate – greenLizard

+0

をいくつかのアイデアでさらに編集して実装しています – glogic

関連する問題