2016-08-05 72 views
0

我有兩個CoreData實體與一個一對多的關係 - Contact(主)和PhoneNumber(相關)如何對相關屬性的提取請求進行排序?

聯繫人可以有多個電話號碼,我需要通過PhoneNumbers屬性進行排序Contacts,我要排序它通過在registered物業現有true值,例如:

 
Contact1 
    prop1 = "value1" 
    prop2 = "value2" 
    PhoneNumbers = [ 
    {prop1 = "value1", prop2 = "value2", registered = false}, 
    {prop1 = "value1", prop2 = "value2", registered = false} 
    ] 

Contact2 
    prop1 = "value1" 
    prop2 = "value2" 
    PhoneNumbers = [ 
    {prop1 = "value1", prop2 = "value2", registered = false}, 
    {prop1 = "value1", prop2 = "value2", registered = false}, 
    {prop1 = "value1", prop2 = "value2", registered = true} 
    ] 

Contact3 
    prop1 = "value1" 
    prop2 = "value2" 
    PhoneNumbers = [ 
    {prop1 = "value1", prop2 = "value2", registered = false}, 
    {prop1 = "value1", prop2 = "value2", registered = false} 
    ] 

Contact2具有PhoneNumberregistered = true,我想將它移動到取結果的頂部

我的排序描述符:

[NSSortDescriptor sortDescriptorWithKey:@"phoneNumbers" ascending:YES selector:@selector(registeredCompare:)]; 

當我指定phoneNumbers鍵(如在數據模型的關係),我接收錯誤Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'to-many key not allowed here'

當我改變鍵到另一個,誤差變化到unsupported NSSortDescriptor selector: registeredCompare:即使參數類型是否正確

如何按相關屬性對數據進行排序?

比較(NSSortDescriptor sortDescriptorWithKey:ascending:comparator:)不被NSFetchRequest
支持獲取所有值數組和排序是不是一個解決方案 - 太多的接觸可以凍結申請

回答

0

您不能對一個一對多的關係。每個聯繫人可能有多個PhoneNumbers;要決定哪個聯繫人先來,CoreData需要每個聯繫人的單個值。

你的第二個錯誤是因爲registeredCompare不是一個公認的排序選擇器。從Core Data Programming Guide

SQLite的支持的種類選擇的比較:和caseInsensitiveCompare :, localizedCompare :, localizedCaseInsensitiveCompare:和localizedStandardCompare :.

一個解決方案,您的問題將是一個布爾屬性添加到Contact實體,說hasRegisteredPhoneNumber您更新到真或假,當你添加/修改/刪除相關PHONENUMBERS。然後使用該新屬性作爲排序關鍵字。

相關問題