Actuellement, je comprends que je ne peux pas définir des variables de propriété dans une méthode de classe.Définition de variables de propriété dans les méthodes de classe
Par exemple:
#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
Je cherche à travers le cadre de Parse et essaie de mieux comprendre comment mettre en œuvre une connexion comme ils l'ont fait. La méthode de classe (void)logInWithUsernameInBackground:password:block
est où j'essaye d'assigner le nom d'utilisateur et le mot de passe de variables de propriété mais c'est un non.
Voici la mise en œuvre de la méthode actuelle:
+ (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);
}];
}
Dans le fichier Parse PFUser.h, ceci est une méthode de classe ... Mais comment donnent-ils les variables de propriété?
Je sais que les variables statiques peuvent être assignées/définies dans une méthode de classe mais j'aimerais accéder à ces variables d'une autre classe.
EDIT: Après avoir affiché le premier commentaire, la classe ISUser a déjà un singleton implémenté.
+ (instancetype)currentUser
{
static ISUser *sharedInstance = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
Mais maintenant quoi? Je dois remplacer la méthode init et définir les variables? Mais comment la méthode init sait-elle à quoi attribuer les variables? Devrai-je ajouter des paramètres au + (instancetype)currentUser
comme si + (instancetype)currentUser:username password:(NSString *)password
puis surcharger la méthode init? + (instancetype)currentUser
est une autre méthode de classe que j'ai extrait du framework PFUser.
Vous pouvez utiliser une méthode de classe avec un motif singleton - le premier appel à 'logInWithUsernameInBackground' allouerait un objet et effectuer la connexion. Les appels ultérieurs utilisent l'objet existant et appellent simplement le bloc d'achèvement immédiatement - http://www.galloway.me.uk/tutorials/singleton-classes/ – Paulw11