我的要求: 我在索引標題是英文字母的首字母(另外一個搜索圖標索引表視圖上市的人按字母順序排列的名字的這個簡單的要求在頂部和#顯示以數字和其他特殊字符開頭的misc值)。iPhone通訊錄應用程序樣式的索引表視圖實現
我迄今所做的: 1.我使用的核心數據進行存儲和「姓氏」被模擬爲在聯繫人實體的字符串屬性 2.我使用NSFetchedResultsController來顯示索引排序表視圖。
完成我的要求的問題: 1.首先,我無法得到部分索引標題爲字母的第一個字母。戴夫在下面的帖子中的建議,幫助我達到了同樣的效果:NSFetchedResultsController with sections created by first letter of a string
我遇到的唯一問題是戴夫的建議是我無法獲得名爲「#」索引下的misc命名組合。
我曾嘗試: 1.我嘗試添加自定義的比較方法的NSString(類別),檢查如何比較和部分製作,但如果在NSSortDescriptor選擇指定自定義方法不會被調用。
下面是一些代碼:
@interface NSString (SortString)
-(NSComparisonResult) customCompare: (NSString*) aStirng;
@end
@implementation NSString (SortString)
-(NSComparisonResult) customCompare:(NSString *)aString
{
NSLog(@"Custom compare called to compare : %@ and %@",self,aString);
return [self caseInsensitiveCompare:aString];
}
@end
代碼來獲取數據:
NSArray *sortDescriptors = [NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"last_name"
ascending:YES selector:@selector(customCompare:)] autorelease]];
[fetchRequest setSortDescriptors:sortDescriptors];
fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext sectionNameKeyPath:@"lastNameInitial" cacheName:@"MyCache"];
你能不能讓我知道我缺少,以及如何要求能實現呢?
嗨Alex, 感謝您的幫助。上面的代碼確實有效。但是fetchedresultscontroller部分並不如預期。例如,如果有兩個姓氏值分別爲111和222,則表中有兩個部分(一個爲1,另一個爲2)。 爲了規避這個問題,並將它們歸入「#」,我在#前面加上了以數字開頭的姓氏,同時存儲在覈心數據中。如果姓氏以表格渲染器中的#開頭,則必須剝離它。我相信這不是一個乾淨的方式來做到這一點。有沒有更好的方式來處理這與取得的結果控制器? – KSH 2010-06-07 07:52:48
此外,#部分出現在「A」上方的頂部(因爲爲獲取的結果控制器指定了排序順序)。但默認聯繫人應用程序在底部顯示#也是有效的。是否有可能通過獲取結果控制器來實現這一點?或者我們應該手動編寫管理各種陣列的整個邏輯?我更喜歡抓取的結果控制器來處理內存和易用性。 – KSH 2010-06-07 08:03:00
更新:我添加了另一個數字列,以指示姓是否以字母表開頭,並且先排序,然後再次排列在姓氏列上。即。兩種排序描述符產生了適當的結果(我也將#推到了索引的底部)。目前爲止工作良好,但如果應用程序使用其他語言本地化,該怎麼辦?如何檢查名稱的給定起始字母是否是標準字符集的一部分,並且在索引中可用(假設索引已本地化)。 – KSH 2010-06-07 10:21:19