RestKit GET-Abfrageparameter

Ich verwende RestKit 0.10.0 seit einiger Zeit und bis zu diesem Zeitpunkt habe ich nur serialisierte Objekte auf meinem Server veröffentlicht:

[[RKObjectManager sharedManager] postObject:serializedObject
                                 usingBlock:^(RKObjectLoader *loader) {
                                     loader.delegate = self;
                                     loader.objectMapping = responseMapping;
                                     loader.serializationMIMEType = RKMIMETypeFormURLEncoded;
                                     loader.targetObject = nil;
                                 }];

So weit, ist es gut. Jetzt muss ich jedoch eine GET-Anforderung mit einigen Abfrageparametern an den Server senden. Das erste, woran ich dachte, war, dasselbe zu tun wie beim Posten von Objekten:

Erstellen Sie eine Serialisierungszuordnung für das Objekt, das die Abfrageparameter einkapseltErstellen Sie eine Antwortzuordnung für das vom Server empfangene ObjektDefinieren und Verwenden eines Routers für RKRequestMethodGET (anstelle von RKRequestMethodPOST)mache die Anfrage mit getObject: usingBlock (anstelle von postObject: usingBlock)

Ich stellte bald fest, dass dies nicht der richtige Weg ist. Nach der Suche nach verfügbaren Ressourcen (RestKit Wiki, RestKit Google-Gruppe) Ich kenne jetzt zwei Lösungen, die als gültig angesehen werden:

Anhängen der Abfrageparameter an den Ressourcenpfad.

Das funktioniert einwandfrei.

NSDictionary *queryParams = [NSDictionary dictionaryWithObjectsAndKeys:
                                          token, @"accessToken",
                                          [NSNumber numberWithInt:level], @"level",
                                          [NSNumber numberWithInt:count], @"count",
                                          nil];

NSString* resourcePath = [PEER_SUGGESTIONS_CONTROLLER_PATH stringByAppendingQueryParameters:queryParams];

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:resourcePath
                                                usingBlock:^(RKObjectLoader *loader) {
                                                    loader.delegate = self;
                                                    loader.objectMapping = responseMapping;
                                                }];
Einstellen der Abfrageparameter im Loader Block.

Die Abfrageparameter werden nicht gesendet.

RKParams *params = [RKParams params];
[params setValue:token forParam:@"accessToken"];
[params setValue:[NSNumber numberWithInt:level] forParam:@"level"];
[params setValue:[NSNumber numberWithInt:count] forParam:@"count"];

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:PEER_SUGGESTIONS_CONTROLLER_PATH
                                                usingBlock:^(RKObjectLoader *loader) {
                                                    loader.delegate = self;
                                                    loader.objectMapping = responseMapping;
                                                    loader.params = params;
                                                }];

Meine Fragen sind:

Warum funktioniert die zweite Lösung nicht?Warum funktioniert die erste Lösung, ohne dass loader.targetObject auf nil gesetzt werden muss, obwohl die JSON-Antwort keinen Stammschlüsselpfad enthält?In welchen Fällen sollte ich die Methode getObject: usingBlock verwenden? Was ist der beabsichtigte Zweck?Wofür sollte ich loader.params verwenden? Das Lernprogramm zur Objektzuordnung aus demwiki sagt, dass diese Eigenschaft verwendet werden kann, um POST-Parameter zu kapseln, aber ich sehe den Punkt nicht, da ich die Parameter in das serialisierte Objekt einschließen kann, das mit der Methode postObject: usingBlock gesendet wird.

Vielen Dank.

[LATER EDIT]

Zur Antwort auf meine zweite Frage: Ich habe das targetObject im Loader-Block auf nil gesetzt, wenn POST-Anforderungen gesendet wurden, da RestKit andernfalls versucht, die Zuordnung von Sendeobjekten für die Antwort zu verwenden (aktivieren Sie diese Option)Verknüpfung für eine verwandte Diskussion). Da ich jedoch loadObjectsAtResourcePath: usingBlock: verwende, wird kein Objekt gesendet. Daher wird die Antwort natürlich auf die Antwortzuordnung abgebildet, ohne dass das targetObject auf nil gesetzt werden muss.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage