2013-01-12 65 views
2

我使用KVC直到現在才能訪問對象的屬性。使用KVC的MagicalRecord排序

在我的對象,我有這樣的方法:

-(Address *)mainAddress { 
    if (self.addresses != nil) { 
     return [self.addresses anyObject]; //stub method 
    } 
    else { 
     return nil; 
    } 
} 

我可以使用此方法KVC使用

mystring = [cliente valueForKeyPath:@"mainAddress.city"]; 

,但我不能用它來創建一個NSFetchRequestController(此代碼使用MagicalRecord)

NSFetchedResultsController *acontroller = [Customer fetchAllSortedBy:@"mainAddress.city" ascending:ascending withPredicate:companyPredicate groupBy:nil delegate:self]; 

這是錯誤:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath mainAddress.city not found in entity <NSSQLEntity Customer id=4>' 

回答

1

爲了使用NSFetchedResultsController進行排序,您的mainAddress keyPath必須是實體上的屬性。 NSFRC將對內存中不使用KVC的數據進行排序,但會使用底層數據存儲。底線答案:在數據模型中爲您的實體創建一個mainAddress字段。

+0

我會嘗試,但我不喜歡在數據庫中添加重複。 – IgnazioC

+0

這不是一個重複的問題,而是要弄清楚爲什麼你的搜索會崩潰。你寧願有什麼,重複的數據或崩潰的應用程序? – casademora

+0

我改變了一個簡單的屬性的方法,現在NSFRC完美的作品,甚至MagicalRecord ...但我需要改變我的模型。 – IgnazioC