Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 从不在集合中的核心数据获取对象_Iphone_Objective C_Core Data_Nspredicate - Fatal编程技术网

Iphone 从不在集合中的核心数据获取对象

Iphone 从不在集合中的核心数据获取对象,iphone,objective-c,core-data,nspredicate,Iphone,Objective C,Core Data,Nspredicate,我试图从核心数据中提取不在给定集合中的对象,但我无法使其工作 例如,假设我们有一个名为User的核心数据实体,它有一些属性,如userName、familyName、givenName和active。给定表示一组用户名的字符串数组,我们可以轻松获取与该用户名列表对应的所有用户: NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init]; NSFetchRequest *request = [[NSFetchReques

我试图从核心数据中提取不在给定集合中的对象,但我无法使其工作

例如,假设我们有一个名为User的核心数据实体,它有一些属性,如userName、familyName、givenName和active。给定表示一组用户名的字符串数组,我们可以轻松获取与该用户名列表对应的所有用户:

NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"User"
                                          inManagedObjectContext:moc];
[request setEntity:entity];

NSArray *userNames = [NSArray arrayWithObjects:@"user1", @"user2", @"user3", nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName IN %@", userNames];
[request setPredicate:predicate];
NSArray *users = [moc executeFetchRequest:request error:nil];

但是,我希望获取该集合的补码,也就是说,我希望核心数据中没有在用户名数组中指定用户名的所有用户。有人知道如何处理这个问题吗?我认为在谓词
中添加
“NOT”
(即“userName NOT in%@”)
非常简单,但Xcode抛出一个异常,表示无法解析谓词格式。我还尝试使用谓词生成器来获取请求,但没有成功。文档也不是特别有用。建议?评论?感谢您的帮助:)

要查找不在阵列中的对象,您只需执行以下操作:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (userName IN %@)", userNames];

这将返回一个对所有对象的请求,而不包括您指定的对象

我对核心数据/objective-c不在行,但谓词应该类似于下面的语句

[predicateFormat appendFormat:@"not (some_field_name in {'A','B','B','C'})"];
例如:

NSMutableString * mutableStr = [[NSMutableString alloc] init];

//prepare filter statement
for (SomeEntity * e in self.someArray) {
    [mutableStr appendFormat:@"'%@',", e.key];
}

//excluded objects exist
if (![mutableStr isEqual:@""])
{
    //remove last comma from mutable string
    mutableStr = [[mutableStr substringToIndex:mutableStr.length-1] copy];

    [predicateFormat appendFormat:@"not (key in {%@})", mutableStr];
}

//...
//use this predicate in NSFetchRequest
//fetchRequest.predicate = [NSPredicate predicateWithFormat:predicateFormat];
//...   

下面是另一个有用的示例,演示如何获取字符串列表,并过滤掉任何不以字母a-Z开头的字符串:

NSArray* listOfCompanies = [NSArray arrayWithObjects:@"123 Hello", @"-30'c in Norway", @"ABC Ltd", @"British Rail", @"Daily Mail" @"Zylophones Inc.", nil];

NSPredicate *bPredicate = [NSPredicate predicateWithFormat:@"NOT (SELF MATCHES[c] '^[A-Za-z].*')"];

NSArray *filteredList = [listOfCompanies filteredArrayUsingPredicate:bPredicate];

for (NSString* oneCompany in filteredList)
    NSLog(@"%@", oneCompany);

当我用a-Z索引填充
UITableView
时,我使用这种
NSPredicate
,并希望为不以字母开头的项目设置“其他所有内容”部分。

足够简单。。。谢谢,斯莱夫,太棒了。我以为它不起作用了。但这是因为我数组中的数据来自另一个字段。谢谢简单有效。注意:这不适用于NSNumber变量,这可能有意义,但如果将枚举包装到NSNumber中,则会很遗憾。在这种情况下,请使用类似于
[nspreditate predicateWithFormat:@“NOT(enumWrapper In{%d,%d})”、enum1、enum2]
。不适用于我..:(尽管,
[NSPredicate predicateWithFormat:@“userName IN%@”,但userNames]
可以完美地工作