j'ai créé des catégories de NSManagedObject telles que créer, comte et d'autre. Toutes les œuvres trouvent à l'exception des suivantesNSPredicate créé avec le format et va_list/NSArray échoué, mais le succès de la chaîne
@interface NSManagedObject(ManagedObjectExtension)
+ (id)findWithPredicate:(id)stringOrPredicate, ...;
@end
@implementation NSManagedObject(ManagedObjectUtilities)
+ (id)findWithPredicate:(id)stringOrPredicate, ... {
NSFetchRequest *fetchRequest = [self allFetchRequest];
if (stringOrPredicate) {
NSPredicate *predicate;
if ([stringOrPredicate isKindOfClass:[NSString class]]) {
va_list variadicArguments;
va_start(variadicArguments, stringOrPredicate);
predicate = [NSPredicate predicateWithFormat:stringOrPredicate arguments:variadicArguments];
va_end(variadicArguments);
} else {
predicate = (NSPredicate *)stringOrPredicate;
}
[fetchRequest setPredicate:predicate];
}
NSError *error;
NSArray *results = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
if (error) {
NSLog(@"%@", [error description]);
}
if ([results count] == 0) {
return nil;
} else if ([results count] == 1) {
return [results objectAtIndex:0];
} else {
return results;
}
}
@end
Et ce sont des résultats
NSString *email = [NSString stringWithString:someTextField.text];
NSLog(@"%@", [User findWithPredicate:@"email == "%@", email]);
==> (null)
NSLog(@"%@", [User findWithPredicate:[NSString stringWithFormat:@"email == "%@", email]]);
==> "<User: 0x1d827e10> ..."
Fondamentalement, cette méthode ne fonctionne que lorsque j'envoie une chaîne au lieu de chaîne formatée et arguments. Si j'imprime le prédicat créé à l'intérieur de cette méthode, ce sont des résultats
[User findWithPredicate:@"email == "%@", email];
==> email == "%@"
[User findWithPredicate:[NSString stringWithFormat:@"email == "%@", email]];
==> email == "[email protected]"
Avez-vous une idée de ce qui pourrait causer cette erreur? Tout commentaire ou suggestion sont les bienvenus:)
est-ce une faute de frappe: @ "email =="% @ " devrait-il être: @" email == '% @' " – kitschmaster
@kitschmaster Merci, c'est simple comme ça, supprimer guillemet simple résoudre le problème. –