2014-05-22 2 views
0

현재 클래스 메서드 내에서 속성 변수를 설정할 수 없다는 것을 알고 있습니다. 예를 들어클래스 메서드의 속성 변수 설정

: 나는 구문 분석의 프레임 워크를 통해 찾고 그들이했던 것처럼 로그인을 구현하는 방법의 더 나은 이해를 얻기 위해 노력하고

#ISUser.h 

@interface ISUser : NSObject 
@property (nonatomic, retain) NSString *username; 
@property (nonatomic, retain) NSString *password; 
@property (nonatomic, retain) NSString *email; 
@property (nonatomic, retain) NSString *firstname; 
@property (nonatomic, retain) NSString *lastname; 

+ (void)logInWithUsernameInBackground:(NSString *)username 
          password:(NSString *)password 
           block:(ISUserResultBlock)block; 

@end 

. 클래스 메서드 (void)logInWithUsernameInBackground:password:block은 내가 속성 변수 사용자 이름과 암호를 지정하려고 시도하지만 어디에도 없습니다. 이 클래스의 방법, 구문 분석 PFUser.h 파일 내에서

+ (void)logInWithUsernameInBackground:(NSString *)username password:(NSString *)password block:(ISUserResultBlock)block 
{ 
    //self.username = username // Of course, I cannot do this 

    NSString *preferredLanguageCodes = [[NSLocale preferredLanguages] componentsJoinedByString:@", "]; 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@", kAPIHost, kAPIPath]]]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
    [request setValue:[NSString stringWithFormat:@"%@, en-us;q=0.8", preferredLanguageCodes] forHTTPHeaderField:@"Accept-Language"]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
    NSData * data = [[NSString stringWithFormat: @"command=login&username=%@&password=%@", username, password] dataUsingEncoding: NSUTF8StringEncoding]; 
    [request setHTTPBody:data]; 

    ConnectionBlock *connection = [[ConnectionBlock alloc] initWithRequest:request]; 
    [connection executeRequestOnSuccess: ^(NSHTTPURLResponse *response, NSString *bodyString, NSError *error) { 
     block([self user], error); 
    } failure:^(NSHTTPURLResponse *response, NSString *bodyString, NSError *error) { 
     block([self user], error); 
    }]; 
} 

...하지만 어떻게이 건물의 변수에 할당 할 : 여기

는 현재 메소드의 구현입니다?

정적 변수를 클래스 메서드 내에서 할당/설정할 수 있지만 다른 클래스의 변수에 액세스하고 싶습니다.

EDIT : 첫 번째 주석을 본 후 ISUser 클래스에는 이미 구현 된 싱글 톤이 있습니다.

+ (instancetype)currentUser 
{ 
    static ISUser *sharedInstance = nil; 
    static dispatch_once_t oncePredicate; 
    dispatch_once(&oncePredicate, ^{ 
     sharedInstance = [[self alloc] init]; 
    }); 
    return sharedInstance; 
} 

하지만 이제 어떻게해야합니까? init 메소드를 오버라이드하고 변수를 설정해야합니까? 하지만 init 메소드는 변수를 설정하는 방법을 어떻게 알 수 있습니까? + (instancetype)currentUser에 매개 변수를 추가해야합니다 (예 : + (instancetype)currentUser:username password:(NSString *)password). 그러면 init 메소드도 무시할 수 있습니까? + (instancetype)currentUser은 PFUser 프레임 워크에서 가져온 또 다른 클래스 메서드입니다.

+1

당신은 싱글 톤 패턴으로 수업 방법을 사용할 수 있습니다 도움이되기를 바랍니다. 후속 호출은 기존 객체를 사용하고 즉시 완료 블록을 호출합니다. - http://www.galloway.me.uk/tutorials/singleton-classes/ – Paulw11

답변

1

클래스 메서드에서 속성을 설정할 수 없습니다. 인스턴스 메소드에서이를 수행 할 수 있습니다. 속성은 클래스의 인스턴스를위한 것이기 때문입니다.

구문 분석 로그인 메서드에서 메서드 매개 변수로 일부 속성을 사용하고이를 로그인 프로세스에 사용하지만 조작하지는 않습니다. 객체를 할당하고 로그인을 수행 할 logInWithUsernameInBackground` '에 대한 첫 번째 호출 -