2017-01-11 84 views
0

我試圖使用NSPredicateCoreData獲取數據。問題是,我只需要比較實體的值的第一個數字:NSPredicate獲得第一個數字

class Foo: NSManagedObject { 

    @NSManaged var value: NSNumber // random number 1xx - 7xx 

} 

我現在的謂詞比較完整的價值:

NSPredicate(format: "value == %d", 5) 

我一直在使用.filter代替也嘗試但經過測試,它顯示它在我的情況下速度是它的兩倍。

問:
我應該如何改變我的謂語,使其成爲可以比較的value第一個數字?

+0

是否所有的數字都有3位數?然後'NSPredicate(格式:「value> =%d和值<=%d」,500,599)'會起作用。 –

+0

@MartinR是的,他們都有3位數字,但我沒有正確解釋的是'5'是一個動態數字。它可能在'0'和'10'之間。 –

回答

0

我不知道一個核心數據謂詞,它檢查數字的第一個數字 。對於字符串您可以使用BEGINSWITH

但是,如果(在你的情況下)的所有號碼有3個數字,那麼你可以在給定的範圍而不是創造數字的謂詞:

let digit = 5 // some number in the range 0...9 
let predicate = NSPredicate(format: "value >= %ld AND value <= %ld", digit * 100, digit * 100 + 99) 

(請注意,Int參數的正確格式%ld。)

+0

謝謝,我太過於專注於獲取「value」的第一個數字,而不是找到另一種解決方法。 –