2015-02-24 14 views
0

我對iOS相對比較陌生,在覈心數據分配中發現自己被「扔給狼」。我正嘗試使用NSPredicate來創建一個Note對象的數組以搜索managedObjectContext。這不起作用,但我認爲我已經接近「終點線」。這裏是我得到的:將從managedObjectContext過濾的對象變爲NSArray

我有一個managedObjectContext實例化,並有Note對象在它。

我創建了一個名爲filteredNotes的變量,它位於實例化爲空的類的頂部(至少我是這麼認爲的)。

var filteredNotes: [Note] = [] 

再往下,我有我想「填補」了filteredNote陣列匹配謂詞注對象的功能。下面是我想做到這一點:

let resultPredicate = NSPredicate(format: "noteTitle contains[c] %@", searchBar.text) 

    filteredNotes = (managedObjectContext as! NSArray).filteredArrayUsingPredicate(resultPredicate) 

編譯器有這樣一段話吧:

  1. Cast from 'NSManagedObjectContext?' to unrelated type 'NSArray' always fails
  2. Cannot assign a value of type '[AnyObject]' to a value of type '[Note]'

我看到很多的例子香草NSArrays(不是managedObjectContexts)這樣做,我難住爲什麼我不能這樣做瓦特/ managedObjectContext這是充滿了Note對象。

這裏就是我的注意:NSManagedObject的樣子:

import Foundation 
import CoreData 

class Note: NSManagedObject { 

    @NSManaged var dateCreated: NSDate 
    @NSManaged var dateEdited: NSDate 
    @NSManaged var noteTitle: String 
    @NSManaged var noteBody: String 

} 

如何創建filteredNote陣列有什麼建議?

回答

1

託管對象上下文與數組無關。它不能被對象填滿。它只是一個抽象類,可讓您訪問您的數據。

從核心數據存儲中獲取對象的方式如下:創建一個提取請求,可選地爲請求添加過濾器和/或排序,獲取對象。

let request = NSFetchRequest(entityName:"Note") 
let result = managedObjectContext.executeFetchRequest(request error:nil) as [Note] 

您可以現在要麼(鑄造的NSArray後filteredArrayUsingPredicate)過濾此陣,也可將謂詞添加到原來的取得請求(甚至應該更有效)。

+0

'let result = ...'產生這個編譯器錯誤:'不能用類型爲'(NSFetchRequest)'的參數列表調用'executeFetchRequest'' – Adrian 2015-02-24 12:54:10

+0

當然,我忘記了錯誤參數 - 你可以自己想出來只需通過自動完成;-)。 – Mundi 2015-02-24 22:16:02

+0

謝謝!我有一個月的時間,所以我非常感謝你的洞察力。 – Adrian 2015-02-24 22:17:38