Uczę się RESTKit i śledzę samouczek this, który jest zgodny z poprzednią wersją RESTKit, a wiele zmieniło się w wersji v0.20.0, więc czytam o nowej wersji i robi to samo, co w tutorialu.Problemy z RESTKit, nie można poprawnie mapować
Teraz jest problem z mapowaniem i spędziłem wiele godzin na nim bez powodzenia. Błąd otrzymuję to:
error: Error Domain=org.restkit.RestKit.ErrorDomain Code=1001 "No response descriptors match the response loaded." UserInfo=0x758d320 {NSErrorFailingURLStringKey=https://api.foursquare.com/v2/venues/search?client_id=<client id>&client_secret=KYHQHRYJ4PYFJYEG1F1IQVLQDM4G1HZ1STB2O1VUVUVQZBGS<client secret>&ll=37.33,-122.03&query=coffee&v=20120602, NSLocalizedFailureReason=A 200 response was loaded from the URL 'https://api.foursquare.com/v2/venues/search?client_id=<client id>&client_secret=<client secret>&ll=37.33,-122.03&query=coffee&v=20120602', which failed to match all (1) response descriptors:
<RKResponseDescriptor: 0x9566a60 baseURL=https://api.Foursquare.com/v2/ pathPattern=(null) statusCodes=200-299> failed to match: response URL 'https://api.foursquare.com/v2/venues/search?client_id=<client id>&client_secret=<client secret>&ll=37.33,-122.03&query=coffee&v=20120602' is not relative to the baseURL 'https://api.Foursquare.com/v2/'., NSLocalizedDescription=No response descriptors match the response loaded., keyPath=null, NSErrorFailingURLKey=https://api.foursquare.com/v2/venues/search?client_id=<client id>&client_secret=<client secret>&ll=37.33,-122.03&query=coffee&v=20120602, NSUnderlyingError=0x758d3a0 "No mappable object representations were found at the key paths searched."}
Venue.h jest:
#import <Foundation/Foundation.h>
@interface Venue : NSObject
@property (strong, nonatomic) NSString *name;
@end
Venue.m jest:
#import "Venue.h"
@implementation Venue
@synthesize name;
@end
I robię wszystko, co w MasterViewController.m w metodzie ViewDidAppear , który jest:
- (void) viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSURL *baseURL = [NSURL URLWithString:@"https://api.Foursquare.com/v2"];
AFHTTPClient * client = [AFHTTPClient clientWithBaseURL:baseURL];
[client setDefaultHeader:@"Accept" value:RKMIMETypeJSON];
RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];
RKObjectMapping *venueMapping = [RKObjectMapping mappingForClass:[Venue class]];
[venueMapping addAttributeMappingsFromDictionary:@{
@"name" : @"name"
}];
RKResponseDescriptor * responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:venueMapping
pathPattern:nil
keyPath:@"response.venues"
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[objectManager addResponseDescriptor:responseDescriptor];
NSString *latLon = @"37.33,-122.03";
NSString *clientID = [NSString stringWithUTF8String:kCLIENTID];
NSString *clientSecret = [NSString stringWithUTF8String:kCLIENTSECRET];
NSDictionary *queryParams;
queryParams = [NSDictionary dictionaryWithObjectsAndKeys:latLon, @"ll", clientID, @"client_id", clientSecret, @"client_secret", @"coffee", @"query", @"20120602", @"v", nil];
//NSLog(@"object manager: %@ - %@", objectManager.baseURL, [[objectManager responseDescriptors] objectAtIndex:0]);
/*
RKRelationshipMapping* relationShipMapping = [RKRelationshipMapping relationshipMappingFromKeyPath:@"venues"
toKeyPath:@"venues"
withMapping:venueMapping];
[venueMapping addPropertyMapping:relationShipMapping]; */
[objectManager getObjectsAtPath:@"https://api.Foursquare.com/v2/venues/search"
parameters:queryParams
success:^(RKObjectRequestOperation * operaton, RKMappingResult *mappingResult)
{
NSLog(@"success: mappings: %@", mappingResult);
}
failure:^(RKObjectRequestOperation * operaton, NSError * error)
{
NSLog (@"failure: operation: %@ \n\nerror: %@", operaton, error);
}];
}
I hav Sprawdziłem odpowiedź w przeglądarce i jest w porządku, ale z jakiegoś powodu cokolwiek zrobiłem, nie pozbyłem się błędu. Utknąłem w pierwszym etapie mapowania i nie mogę iść do przodu. Wszystkie przykłady i dokumenty na ten temat w Internecie są nieaktualne i nie mając doświadczenia ze starszymi wersjami RESTKita, nie jestem w stanie tego zrozumieć. Powiedz, co robię źle.
Korzystanie z xcode 4.5 i budynku dla iOS6.
Response (zaznaczone na przeglądarce):
{"meta":{"code":200},"response":{"venues":[{"id":"4f482132e4b0f85d07c34cb5","name":"De Anza 3 Coffee Bar","contact":{},"location":{"address":"10500 De Anza Blvd","lat":37.329438,"lng":-122.03083,"distance":96,"postalCode":"95014","city":"Cupertino","state":"CA","country":"United States","cc":"US"},"canonicalUrl":"https:\/\/foursquare.com\/v\/de-anza-3-coffee-bar\/4f482132e4b0f85d07c34cb5","categories":[{"id":"4bf58dd8d48988d1e0931735","name":"Coffee Shop","pluralName":"Coffee Shops","shortName":"Coffee Shop","icon":{"prefix":"https:\/\/foursquare.com\/img\/categories\/food\/coffeeshop_","sizes":[32,44,64,88,256],"name":".png"},"primary":true}],"verified":false,"restricted":true,"stats":{"checkinsCount":1,"usersCount":1,"tipCount":0},"likes":{"count":0,"groups":[]},"specials":{"count":0,"items":[]},"hereNow":{"count":0,"groups":[]},"referralId":"v-1357121711"},{"id":"40ccea80f964a52019011fe3","name":"Coffee Society","contact":{"phone":"4087258091","formattedPhone":"(408) 725-8091"},"location":{"address":"21265 Stevens Creek Blvd","crossStreet":"at Oaks Shopping Center","lat":37.32330342,"lng":-122.047382,"distance":1709,"postalCode":"95014","city":"Cupertino","state":"CA","country":"United States","cc":"US"},"canonicalUrl":"https:\/\/foursquare.com\/v\/coffee-society\/40ccea80f964a52019011fe3","categories":[{"id":"4bf58dd8d48988d1e0931735","name":"Coffee Shop","pluralName":"Coffee Shops","shortName":"Coffee Shop","icon":{"prefix":"https:\/\/foursquare.com\/img\/categories\/food\/coffeeshop_","sizes":[32,44,64,88,256],"name":".png"},"primary":true}],"verified":false,"restricted":true,"stats":{"checkinsCount":2536,"usersCount":869,"tipCount":24},"likes":{"count":0,"groups":[]},"specials":{"count":0,"items":[]},"hereNow":{"count":0,"groups":[]},"referralId":"v-1357121711"}, .....
Wielkie dzięki, nie spodziewałem się, że to będzie problem, a także dzięki za wysiłek konwersji tutorialu na v0.20! – SpeedBirdNine
@Tilo Gdzie możemy znaleźć Twój przekonwertowany samouczek? Pomogłoby to całkiem sporo. – Danny