Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.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
如何在单个提取请求中调用两个NSPredicate。iOS Swift核心数据_Ios_Swift_Core Data_Nspredicate_Nsfetchrequest - Fatal编程技术网

如何在单个提取请求中调用两个NSPredicate。iOS Swift核心数据

如何在单个提取请求中调用两个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

在我的应用程序中,我使用的是核心数据。现在我想从数据库中获取数据,为此我使用fetch请求。但是我希望在单次提取请求中使用两个
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