Ich initialisiere RKClient SharedClient in meiner Anwendung Delegate in ApplicationDidFinishLaunching und es funktioniert gut. Ich benutze diese Client-Ziel-URL für die meisten Anwendungen, aber bei 1 Punkt, in 1 Klasse (Player), muss ich die Avatare des Benutzers von gravatar.com laden. Also, ich hatte die Player-Klasse definieren eigenen RKClient und entsprechen dem RKRequestDelegate-Protokoll. Es macht dann die Anfrage durch diese neue RKClient Instanziierung und setzt den Delegierten der Anfrage auf self. Das Problem ist, dass ich nie eine Antwort bekomme; das istRestKit: Mehrere RKClients/ändern baseURL
- (void)request:(RKRequest *)request didLoadResponse:(RKResponse *)response
Wird nie aufgerufen. Hier ist das gesamte Codebeispiel:
// Player.m
#import "Player.h"
@implementation Player
# pragma mark - Accessor Synthesizers
@synthesize identifier = _identifier;
@synthesize name = _name;
@synthesize story = _story;
@synthesize emailHash = _emailHash;
@synthesize pointPercentage = _pointPercentage;
@synthesize hitPercentage = _hitPercentage;
@synthesize lastCups = _lastCups;
@synthesize shotCount = _shotCount;
@synthesize hitCount = _hitCount;
@synthesize wins = _wins;
@synthesize losses = _losses;
@synthesize gravatar = _gravatar;
# pragma mark - Instance Methods
- (void)getGravatar {
RKClient *gClient = [RKClient clientWithBaseURL:[NSURL URLWithString:@"http://gravatar.com"]];
NSString *path = [self gravatarLink];
NSLog(@"Getting Gravatar With Link: http://gravatar.com%@", path);
[gClient get:path delegate:self];
}
- (NSString *)description {
return [NSString stringWithFormat:@"{Season: [id=%i, name=%@, story=%@ ]}", _identifier, _name, _story];
}
# pragma mark - RKRequest Delegate Methods
- (void)request:(RKRequest *)request didLoadResponse:(RKResponse *)response {
NSLog(@"Gravatar Back: %@", response.bodyAsString);
self.gravatar = response.body;
[[NSNotificationCenter defaultCenter] postNotificationName:@"GravatarLoaded" object:self];
}
# pragma mark - Private Methods
- (NSString *)gravatarLink {
NSString *path;
path = [NSString stringWithFormat:@"/avatar/%@?d=monsterid&r=x", _emailHash];
if([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale]==2)
return [path stringByAppendingString:@"&s=200"];
else
return [path stringByAppendingString:@"&s=100"];
}
@end
Auch ich habe versucht, die Basis-URL des sharedClient ändern und nur mit der sharedClient für die Gravatar-Anfragen. Aber immer, wenn ich versuche, die baseURL Eigenschaft des RKClient sharedClient zu ändern, eine der folgenden Arten:
[[RKClient sharedClient] setBaseURL:[NSURL URLWithString:@"http://gravatar.com"]];
oder
[RKClient sharedClient].baseURL: [NSURL URLWithString:@"http://gravatar.com"];
Ich erhalte einen Laufzeitfehler:
2012-04-07 15:37:23.565 MLP[34403:fb03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSURL URLByAppendingResourcePath:queryParameters:]: unrecognized selector sent to instance 0x8bcdd50'
*** First throw call stack:
(0x1b7c022 0x1f58cd6 0x1b7dcbd 0x1ae2ed0 0x1ae2cb2 0x23eb5 0x24032 0x6ddb 0xdda2 0xc465c5 0xc467fa 0x14db85d 0x1b50936 0x1b503d7 0x1ab3790 0x1ab2d84 0x1ab2c9b 0x20407d8 0x204088a 0xbb5626 0x27cd 0x2735)
terminate called throwing an exception(lldb)