2016-06-06 12 views
0

In meiner App verwende ich Core Data. Jetzt möchte ich Daten von der Datenbank holen und dafür benutze ich Abrufanforderung. Aber ich möchte zwei verwenden zwei NSPrediate in Single-Fetch-Anfrage, also wie kann ich das tun.Wie kann ich zwei NSPredate in Einzelabrufanforderung aufrufen. Core Data iOS Swift

Dies ist mein Code:

let feedfetch = NSFetchRequest(entityName: "Feed") 
feedfetch.predicate = NSPredicate(format: "userid == %@", userid) 

let fetchedPerson = try moc.executeFetchRequest(feedfetch) 

Aber ich will zwei oder mehr Prädikat verwenden, so wie kann ich dies tun?

Ich will das alles in einem anrufen Anfrage holen so wie kann ich dies tun

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) 
+2

NSPredicate (Format: "userid == \\ (userId) UND is_deleted == '0'") –

+1

Verwendung AND-Operator wie Benutzer-ID ==% @ UND is_deleted == [NSNumber numberWithBool: FALSCH] UND ....... –

+0

@LucaDavanzo cool funktioniert gut, aber wie kann ich sortDescriptior in diesem hinzufügen? –

Antwort

12

Wenn Sie aus irgendeinem Grund, zwei Prädikate verwenden müssen (NSPredicate Objekte) statt einer Zeile:

"(userid == %@) AND (is_deleted == %@)" 

verwenden Sie dann NSCompoundPredicate API:

feedfetch.predicate = NSCompoundPredicate(type:.AndPredicate, subpredicates:[ 
    NSPredicate(format: "userid == %@", userid), 
    NSPredicate(format: "is_deleted == %@", "0")]) 
+0

verwenden, aber wie kann ich NSSortDescriptor in dieser Anfrage hinzufügen? @Andriy –

+0

Der gleiche Weg wie in Ihrem Code. Der Sortierdeskriptor ist an 'NSFetchRequest' und nicht an 'NSPredicate' angehängt. – Andriy

0

Fetching und Sorti ng

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>