я создал категорию NSManagedObject таких как создать, количества и еще. Все они работают поиск по следующемуNSPredicate создан с форматом и va_list/NSArray не удался, но струнной успехом
@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
кроме И это результаты
NSString *email = [NSString stringWithString:someTextField.text];
NSLog(@"%@", [User findWithPredicate:@"email == "%@", email]);
==> (null)
NSLog(@"%@", [User findWithPredicate:[NSString stringWithFormat:@"email == "%@", email]]);
==> "<User: 0x1d827e10> ..."
В принципе, этот метод работает только тогда, когда я отправить строку вместо отформатированной строки и аргументов. Если я напечатаю предикат, созданный внутри этого метода, это результаты
[User findWithPredicate:@"email == "%@", email];
==> email == "%@"
[User findWithPredicate:[NSString stringWithFormat:@"email == "%@", email]];
==> email == "[email protected]"
У вас есть идеи, что может послужить причиной этого? Любые комментарии или предложения приветствуются:)
это опечатка: @ "email =="% @ " должно быть: @" email == '% @' " – kitschmaster
@kitschmaster Спасибо, это просто, удалите одну цитату, исправьте проблему. –