如何在单个提取请求中调用两个NSPredicate。iOS Swift核心数据
在我的应用程序中,我使用的是核心数据。现在我想从数据库中获取数据,为此我使用fetch请求。但是我希望在单次提取请求中使用两个如何在单个提取请求中调用两个NSPredicate。iOS Swift核心数据,ios,swift,core-data,nspredicate,nsfetchrequest,Ios,Swift,Core Data,Nspredicate,Nsfetchrequest,在我的应用程序中,我使用的是核心数据。现在我想从数据库中获取数据,为此我使用fetch请求。但是我希望在单次提取请求中使用两个nspredite,所以我如何才能做到这一点 这是我的代码: let feedfetch = NSFetchRequest(entityName: "Feed") feedfetch.predicate = NSPredicate(format: "userid == %@", userid) let fetchedPerson = try moc.executeFet
nspredite
,所以我如何才能做到这一点
这是我的代码:
let feedfetch = NSFetchRequest(entityName: "Feed")
feedfetch.predicate = NSPredicate(format: "userid == %@", userid)
let fetchedPerson = try moc.executeFetchRequest(feedfetch)
但是我想使用两个或更多的谓词,那么我怎么做呢
我想在一个获取请求中调用所有这些,那么我如何才能做到这一点
let feedfetch = NSFetchRequest(entityName: "Feed")
feedfetch.predicate = NSPredicate(format: "userid == %@", userid)
feedfetch.predicate = NSPredicate(format: "is_deleted == %@", "0")
let sortDescriptor = NSSortDescriptor(key: "feed_id", ascending: false,selector: #selector(NSString.localizedStandardCompare))
feedfetch.sortDescriptors = [sortDescriptor]
let fetchedPerson = try moc.executeFetchRequest(feedfetch)
如果出于任何原因需要使用两个谓词(
NSPredicate
对象),而不是一行:
"(userid == %@) AND (is_deleted == %@)"
然后使用NSCompoundPredicate
API:
feedfetch.predicate = NSCompoundPredicate(type:.AndPredicate, subpredicates:[
NSPredicate(format: "userid == %@", userid),
NSPredicate(format: "is_deleted == %@", "0")])
如果出于任何原因需要使用两个谓词(
NSPredicate
对象),而不是一行:
"(userid == %@) AND (is_deleted == %@)"
然后使用NSCompoundPredicate
API:
feedfetch.predicate = NSCompoundPredicate(type:.AndPredicate, subpredicates:[
NSPredicate(format: "userid == %@", userid),
NSPredicate(format: "is_deleted == %@", "0")])
提取和排序
let appDel: AppDelegate = UIApplication.shared.delegate as! AppDelegate
let context:NSManagedObjectContext = appDel.managedObjectContext
//Getting the cards with a video from Core Data filtered by ("save") and be an empity string ("") and by ("All")
//Fetching from DB Card
let savedCardRequestForVideo:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: "Card")
//Creating mulit variables for filtering
//Creating a variable "save" for filtering Core Data
let savedCardFilterForVideo = "save"
//Creating a variable with an empty string "" for filtering Core Data
let cardSortingIDForVideo = ""
//Creating a variable "All" for filtering Core Data
let savedCardFilterForVideoAll = "All"
//Creating the predicate array
savedCardRequestForVideo.predicate = NSCompoundPredicate(type:.and, subpredicates:[
NSPredicate(format: "saveVideoControl = %@", savedCardFilterForVideo),
NSPredicate(format: "cardSortingID = %@", cardSortingIDForVideo),
NSPredicate(format: "allData == %@", savedCardFilterForVideoAll)])
//Here we are sorting the reuslts in a ascending order
let savedSortDescriptorForVideo = NSSortDescriptor(key: "businessName", ascending: ascendingOrDescending)
savedCardRequestForVideo.sortDescriptors = [savedSortDescriptorForVideo]
//Creating a variable to hold the results that are being fetched
let savedCardFilterResultsFoeVideo = try! context.fetch(savedCardRequestForVideo) as! [NSManagedObject]
//The variable savedCardsForVideo will hold the results array
savedCardsForVideo = savedCardFilterResultsFoeVideo //This ia an Array<AnyObject>
让appDel:AppDelegate=UIApplication.shared.delegate为!AppDelegate
let context:NSManagedObjectContext=appDel.managedObjectContext
//从核心数据中获取视频卡,核心数据通过(“保存”)过滤,并且是empity字符串(“”)和(“全部”)
//从数据库卡取数
让savedCardRequestForVideo:NSFetchRequest=NSFetchRequest(entityName:“卡”)
//创建用于筛选的多变量
//创建用于筛选核心数据的变量“save”
让savedCardFilterForVideo=“保存”
//使用空字符串“”创建用于筛选核心数据的变量
让cardSortingIDForVideo=“”
//创建用于筛选核心数据的变量“All”
让savedCardFilterForVideoAll=“全部”
//创建谓词数组
savedCardRequestForVideo.predicate=NSCompoundPredicate(类型:。和,子预测:[
NSPredicate(格式:“saveVideoControl=%@”,savedCardFilterForVideo),
NSPredicate(格式:“cardSortingID=%@”,cardSortingIDForVideo),
NSPredicate(格式:“allData=%@”,savedCardFilterForVideoAll)])
//在这里,我们按照升序对reuslts进行排序
让savedSortDescriptorForVideo=NSSortDescriptor(键:“businessName”,升序:升序或升序)
savedCardRequestForVideo.sortDescriptors=[savedSortDescriptorForVideo]
//创建一个变量来保存正在获取的结果
让SavedCardFilterResultsFovideo=试试!获取(savedCardRequestForVideo)为![NSManagedObject]
//变量savedCardsForVideo将保存结果数组
savedCardsForVideo=savedcardfilterresultsfevideo//这是一个数组
提取和排序
let appDel: AppDelegate = UIApplication.shared.delegate as! AppDelegate
let context:NSManagedObjectContext = appDel.managedObjectContext
//Getting the cards with a video from Core Data filtered by ("save") and be an empity string ("") and by ("All")
//Fetching from DB Card
let savedCardRequestForVideo:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: "Card")
//Creating mulit variables for filtering
//Creating a variable "save" for filtering Core Data
let savedCardFilterForVideo = "save"
//Creating a variable with an empty string "" for filtering Core Data
let cardSortingIDForVideo = ""
//Creating a variable "All" for filtering Core Data
let savedCardFilterForVideoAll = "All"
//Creating the predicate array
savedCardRequestForVideo.predicate = NSCompoundPredicate(type:.and, subpredicates:[
NSPredicate(format: "saveVideoControl = %@", savedCardFilterForVideo),
NSPredicate(format: "cardSortingID = %@", cardSortingIDForVideo),
NSPredicate(format: "allData == %@", savedCardFilterForVideoAll)])
//Here we are sorting the reuslts in a ascending order
let savedSortDescriptorForVideo = NSSortDescriptor(key: "businessName", ascending: ascendingOrDescending)
savedCardRequestForVideo.sortDescriptors = [savedSortDescriptorForVideo]
//Creating a variable to hold the results that are being fetched
let savedCardFilterResultsFoeVideo = try! context.fetch(savedCardRequestForVideo) as! [NSManagedObject]
//The variable savedCardsForVideo will hold the results array
savedCardsForVideo = savedCardFilterResultsFoeVideo //This ia an Array<AnyObject>
让appDel:AppDelegate=UIApplication.shared.delegate为!AppDelegate
let context:NSManagedObjectContext=appDel.managedObjectContext
//从核心数据中获取视频卡,核心数据通过(“保存”)过滤,并且是empity字符串(“”)和(“全部”)
//从数据库卡取数
让savedCardRequestForVideo:NSFetchRequest=NSFetchRequest(entityName:“卡”)
//创建用于筛选的多变量
//创建用于筛选核心数据的变量“save”
让savedCardFilterForVideo=“保存”
//使用空字符串“”创建用于筛选核心数据的变量
让cardSortingIDForVideo=“”
//创建用于筛选核心数据的变量“All”
让savedCardFilterForVideoAll=“全部”
//创建谓词数组
savedCardRequestForVideo.predicate=NSCompoundPredicate(类型:。和,子预测:[
NSPredicate(格式:“saveVideoControl=%@”,savedCardFilterForVideo),
NSPredicate(格式:“cardSortingID=%@”,cardSortingIDForVideo),
NSPredicate(格式:“allData=%@”,savedCardFilterForVideoAll)])
//在这里,我们按照升序对reuslts进行排序
让savedSortDescriptorForVideo=NSSortDescriptor(键:“businessName”,升序:升序或升序)
savedCardRequestForVideo.sortDescriptors=[savedSortDescriptorForVideo]
//创建一个变量来保存正在获取的结果
让SavedCardFilterResultsFovideo=试试!获取(savedCardRequestForVideo)为![NSManagedObject]
//变量savedCardsForVideo将保存结果数组
savedCardsForVideo=savedcardfilterresultsfevideo//这是一个数组
NSPredicate(格式:“userid==\(userid)和is'u deleted=='0')使用和运算符类似userid==%@和is'u deleted==[NSNumber numberWithBool:FALSE]和……@LucaDavanzo工作得很好,但如何在这方面添加sortdescriptio?我认为您不能在谓词内部添加排序。您可以使用CompoundPredicateNSPredicate(格式:“userid=\(userid)和is\u deleted='0')使用与userid类似的AND运算符==%@和is\u deleted==[NSNumber numberWithBool:FALSE]而且……@LucaDavanzo工作得很好,但我如何才能在其中添加SortDescriptor?我想你不能在谓词中添加sort。你可以使用CompoundPredicate,但我如何才能在该请求中添加NSSortDescriptor?@AndRiyth方法与在代码中相同。排序描述符附加到NSFetchRequest
而不是NSPredicate
。但是如何在此请求中添加NSSortDescriptor?@ANDRIY的方式与在代码中的方式相同。排序描述符附加到NSFETCHTREQUEST
而不是NSPredicate
。