前言
今天做項目,碰到一個需求,將列表中的cell按照姓名排序顯示,其實也簡單,就是把數據源里的模型按照姓名重置順序即可。
開始
這個之前還真沒遇到過,于是找好朋友Google
,果然給力,第一個結果就是我想要的。
屏幕快照 2016-11-03 下午4.26.44.png
結果發現不但是我想要的,而且還簡單,于是就寫了個Demo,發現果然可以實現。
主要利用數組的sortedArrayUsingFunction:context:
方法,傳入一個自定義的比較方法,該方法利用NSString
的localizedCompare:
方法。
屏幕快照 2016-11-03 下午4.31.47.png
但是我用同樣的方法在項目中,發現并沒有完全實現排序,順序還是錯亂,于是我新建了一個iOS平臺下的Demo,發現果然是有問題的。
屏幕快照 2016-11-03 下午4.35.34.png
同樣的代碼,換了個平臺出問題了,不知怎么回事,如果有大神知道,還請指教。
然后
想到可以先把漢字轉成拼音形式的英文類型字符串,然后根據字母進行排序就好,于是發現系統自帶方法就可以處理,就不需要第三方庫了
(PS:第三方轉化的比較常用的是由George編寫的,使用起來比較方便,這個庫轉化是將漢字轉化成漢字的拼音首字母。有興趣的同學可以自行搜索這個文件。)
代碼如下所示:
NSMutableString *mutableString = [NSMutableString stringWithString:model.person_name];
CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformToLatin, false);
CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformStripDiacritics, false);
mutableString =(NSMutableString *)[mutableString stringByReplacingOccurrencesOfString:@" " withString:@""];
為此我在原先數據模型中新增一個字段用來保存漢字轉拼音的值,接著按這個字段將模型數組的數據進行排序即可。
NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"person_name_pinyin" ascending:YES]];//person_name_pinyin為新增的保存拼音的字段
[unSortedModelArray sortUsingDescriptors:sortDescriptors];
最后
完成,拼音排序。