현재 클래스 메서드 내에서 속성 변수를 설정할 수 없다는 것을 알고 있습니다. 예를 들어클래스 메서드의 속성 변수 설정
: 나는 구문 분석의 프레임 워크를 통해 찾고 그들이했던 것처럼 로그인을 구현하는 방법의 더 나은 이해를 얻기 위해 노력하고
#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 프레임 워크에서 가져온 또 다른 클래스 메서드입니다.
당신은 싱글 톤 패턴으로 수업 방법을 사용할 수 있습니다 도움이되기를 바랍니다. 후속 호출은 기존 객체를 사용하고 즉시 완료 블록을 호출합니다. - http://www.galloway.me.uk/tutorials/singleton-classes/ – Paulw11