【发布时间】:2017-01-13 09:21:33
【问题描述】:
我有一个名为 Forms 的核心数据表,其中包含一个名为 objectids 的属性,该属性包含一个带有 id 的逗号分隔字符串。 (它也可以只包含一个 id) 例如。
objectids = "90" // one id
objectids = "91,23,44" // multiple ids
我收到一个 objectid,我想匹配它并查看它是否作为值存在于任何 Forms -> objectids 条目中。
重要的是它只匹配整个字符串。 IE。 objectid:1 不应与 objectids:91、23、44 等匹配
这是我的代码的 sn-p。
-(NSDictionary*)readForm:(NSString*)objectid
{
...
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Forms"];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"added_date" ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
[fetchRequest setReturnsObjectsAsFaults:NO];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"userid == %@ AND objectids == %@ AND active == %@", user.userid, objectid, @"yes"];
// *** in this fetchRequest I want to include some snippet of code to:
// *** Match string, but only whole string seperated by commas, unless it only has one value in which case it contains no commas.
NSError *err = nil;
NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&err];
if([results count])
{
...
}
}
我希望它是可以理解的。
我对目标 C 的了解还不够,甚至不知道要搜索什么术语。
感谢任何帮助!
【问题讨论】:
-
澄清一下,在查找“1”时,您是要匹配“22,1,5”,还是只匹配“1”? I. E. 您是否要在条目中的列表中查找单个项目,但不是部分匹配的项目?还是这个列表更像是一个 IP 地址,您只想匹配整个列表?
-
是的,抱歉,如果 objectids = "22,1,5" 我希望 "1" 匹配,(也匹配 "22" 或 "5")
-
objectid 是什么?如果它们与您的 CoreData 存储中的其他对象相关,那么听起来您需要考虑一对多关系,而不是使用单个字符串属性来保存多个引用。
-
这有点难以解释,因为它有一个完整的后端。但它们与其他核心数据无关。他们的全部目的是检查我在这个函数中收到的值是否存在于 objectids 中。它们在任何其他方面都不“聪明”。
-
@A.Daleby 在这种情况下,下面 ChiellieNL 的答案的变体应该可以解决问题。
标签: ios objective-c xcode core-data