目前,据我所知,我无法在类方法中设置属性变量。
例如:
#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
我正在研究Parse的框架,并试图更好地理解如何像他们一样实现登录。类方法(void)logInWithUsernameInBackground:password:block
是我尝试分配属性变量用户名和密码的地方,但它不是。
以下是当前方法的实现:
+ (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);
}];
}
在解析PFUser.h文件中,这是一个类方法......但是他们如何分配属性变量?
我知道静态变量可以在类方法中分配/设置,但我想从另一个类访问这些变量。
编辑:查看第一条评论后,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框架中提取的另一个类方法。
答案 0 :(得分:1)
您无法在类方法中设置属性。您可以在实例方法上执行此操作。那是因为属性是用于类的实例。
在parse登录方法中,他们使用一些属性作为方法参数,并将它们用于登录过程,但不操纵它们。
希望有所帮助