2015-06-21 39 views
1

我有一個使用CoreData和NSFetchedResultsController的數據填充的表。它使用一個具有布爾值的屬性填充兩個部分。但我想將每個部分的數據分成兩個數組進行進一步處理。來自NSFetchedResultsController的兩個數組swift

有沒有辦法將Fetched Results Controller生成的兩個部分的數據保存到不同的數組中。

我試圖創建使用用於創建使用的代碼的部分中的屬性值的兩個謂詞:

var context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext! 
var frc: NSFetchedResultsController = NSFetchedResultsController() 
    func getFetchedResultsController() -> NSFetchedResultsController { 
    frc = NSFetchedResultsController(
     fetchRequest: fetchRequest(), 
     managedObjectContext: context, 
     sectionNameKeyPath: "frequent", 
     cacheName: nil) 
    return frc 
} 
//Fetch request of done Items to populate the two sections (Frequent and nonFrequent) 
func fetchRequest() -> NSFetchRequest { 
    let fetchRequest = NSFetchRequest(entityName: "Item") 
    let frequentSortDescriptor = NSSortDescriptor(key: "frequent", ascending: false) 
    let nameSortDescriptor = NSSortDescriptor(key: "name", ascending: true) 
    let predicate = NSPredicate(format: "done == %@", true) 
    fetchRequest.predicate = predicate 
    fetchRequest.sortDescriptors = [frequentSortDescriptor, nameSortDescriptor] 
    return fetchRequest 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    frc = getFetchedResultsController() 
    frc.delegate = self 
    frc.performFetch(nil) 

    frc.fetchRequest.predicate = NSPredicate(format: "frequent == %@", true) 
    if let freqResults = frc.fetchedObjects as? [Item] { 
     freq = freqResults 
    } 

    frc.fetchRequest.predicate = NSPredicate(format: "frequent == %@", false) 
    if let nonFreqResults = frc.fetchedObjects as? [Item] { 
     nonFreq = nonFreqResults 
    } 
    println("\(freq.count) Fav and \(nonFreq.count) Non Fav") 
} 

但「println()一樣」末打印兩個陣列具有各自10個計數。但實際上,'freq.count'應該有7個,'nonFreq.count'應該有3個項目,這兩個部分總共有10個項目。

這些部分顯示正確的項目。我只是不能將這些項目保存到數組中。

是否有可能因爲第一個'fetchRequst()'已經有了一個謂詞,我試圖在它上面應用第二個謂詞?如果是這樣的話,我該如何解決它?

回答

0

您必須在取得的結果控制器的fetchedObjects改變之前調用performFetch()

相反,您可能只是使用過濾器。

let frequent = fetchedObjects.filter() { $0.frequent } 
let infrequent = fetchedObjects.filter() { !$0.frequent } 
相關問題