用于电子邮件问题的 NSPredicate predicateWithFormat
Posted
技术标签:
【中文标题】用于电子邮件问题的 NSPredicate predicateWithFormat【英文标题】:NSPredicate predicateWithFormat for email issue 【发布时间】:2015-12-30 06:33:31 【问题描述】:我在使用 predicateWithFormat 方法创建 NSPredicate 类型对象时遇到问题。
AppDelegate *appdelegateObj = (AppDelegate *)[[UIApplication sharedApplication] delegate];
self.managedObjectContext = [appdelegateObj managedObjectContext];
NSString *emailWithBackslashedAtTheRate = [email stringByReplacingOccurrencesOfString:@"@" withString:@"\\@"];
NSFetchRequest *fetchRequestObj = [NSFetchRequest fetchRequestWithEntityName:@"Usertable"];
NSMutableArray *dataList;
**NSPredicate *predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"email CONTAINS[c] %@",emailWithBackslashedAtTheRate]];**
[fetchRequestObj setPredicate:predicate];
@synchronized(delegate.persistentStoreCoordinator)
NSError *error = nil;
NSMutableArray *filteredUser = (NSMutableArray *)[self.managedObjectContext executeFetchRequest:fetchRequestObj error:&error];
谁能解释一下,是什么问题?
【问题讨论】:
通过调用executeFetchRequest
返回的error
是什么?
emailWithBackslashedAtTheRate 的格式是什么,您的实体中的 email 属性名称是什么?
你能记录下是什么问题吗?
无法解析格式字符串“(email=iostest1@gmail.com)”
【参考方案1】:
在您的用户表中,字段名称电子邮件必须是字符串。
AppDelegate *coreAppDelegate=[[UIApplication sharedApplication]delegate];
NSManagedObjectContext *context=[coreAppDelegate managedObjectContext];
NSEntityDescription *entityDecs=[NSEntityDescription entityForName:@"UserDetail" inManagedObjectContext:context];
NSFetchRequest *request =[[NSFetchRequest alloc]init];
[request setEntity:entityDecs];
// NSLog(@"username = %@",mutarr);
NSPredicate *pred=[NSPredicate predicateWithFormat:@"(email=%@)",TxtEmail];
[request setPredicate:pred];
NSManagedObject *matches =nil;
NSError *error;
【讨论】:
【参考方案2】:您不能使用NSString
方法stringWithFormat
来构建用于谓词的格式字符串。尽管名称相似,predicateWithFormat
和 stringWithFormat
的工作方式不同。您应该将正确的格式字符串直接传递给predicateWithFormat
:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"email CONTAINS[c] %@", email];
(此实例的主要区别在于predicateWithFormat
将由 %@ 表示的字符串括在单引号中,而stringWithFormat
没有。)
【讨论】:
以上是关于用于电子邮件问题的 NSPredicate predicateWithFormat的主要内容,如果未能解决你的问题,请参考以下文章