2012-04-07 7 views
0

applicationDidFinishLaunching에서 내 응용 프로그램 대리인의 RKClient의 sharedClient를 초기화하면 잘 작동합니다. 대부분의 애플리케이션에서이 클라이언트 도착 URL을 사용하고 있지만 1 점 (플레이어)에서 1 점을 얻었을 때 gravatar.com에서 사용자의 아바타를로드해야합니다. 그래서 Player 클래스가 자신의 RKClient를 정의하고 RKRequestDelegate 프로토콜을 준수하도록했습니다. 그런 다음이 새 RKClient 인스턴스화를 통해 요청을 만들고 요청의 대리자를 자체로 설정합니다. 문제는 결코 응답을받지 못한다는 것입니다. 즉,RestKit : 여러 RKClients/baseURL 변경

- (void)request:(RKRequest *)request didLoadResponse:(RKResponse *)response 

절대로 호출되지 않습니다.

// 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 

은 또한, 나는이 sharedClient의 기본 URL을 변경하고 바로 Gravatar에 요청에 대한 sharedClient를 사용하여 시도했다 : 여기에 전체 코드의 샘플입니다. 하지만 나도이 방법의 RKClient sharedClient의 base을 속성을 변경하려고 할 때마다 :

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) 

답변

0

clientWithBaseURL: 방법 :

[[RKClient sharedClient] setBaseURL:[NSURL URLWithString:@"http://gravatar.com"]]; 

또는

[RKClient sharedClient].baseURL: [NSURL URLWithString:@"http://gravatar.com"]; 

내가 런타임 오류 NSURL이 아니라 NSString이 필요합니다. 방금 설정을 구축> Targets-에 갈 필요가

[[RKClient sharedClient] setBaseURL:@"http://gravatar.com"]; 
0

를 사용하는 것을 시도하십시오 -> 우리가 변경된 RestKit 튜토리얼에 지정된대로 다른 링커 플래그

는 "-ObjC-all_load"라는 플래그를 추가 이제 편집 단지 "-ObjC"를 표시하는 것임

이것은 당신을위한 것이어야합니다.

1

내가 사용 : 나를 위해 일한

[[RKClient sharedClient] setBaseURL:[RKURL URLWithString:@"http://gravatar.com"]]; 

.