獲取手機(jī)通訊錄且排序

嗯,獲取通訊錄還有問(wèn)題柿汛,使用靜態(tài)檢查發(fā)現(xiàn)有內(nèi)存泄漏的問(wèn)題就先不寫(xiě)了
先把排序加上去

//獲取字符串(或漢字)首字母

  • (NSString *)firstCharacterWithString:(NSString *)string{
    if (string.length == 0) {
    return @"#";
    }
    NSMutableString *str = [NSMutableString stringWithString:string];
    CFStringTransform((CFMutableStringRef)str, NULL, kCFStringTransformMandarinLatin, NO);
    CFStringTransform((CFMutableStringRef)str, NULL, kCFStringTransformStripDiacritics, NO);
    NSString *pingyin = [str capitalizedString];
    return [pingyin substringToIndex:1];
    }

//將字符串?dāng)?shù)組按照元素首字母順序進(jìn)行排序分組

  • (NSMutableArray *)dictionaryOrderByCharacterWithOriginalArray:(NSArray *)array{
    if (array.count == 0) {
    return nil;
    }
    for (id obj in array) {
    if (![obj isKindOfClass:[NSString class]]) {
    return nil;
    }
    }
    UILocalizedIndexedCollation * indexedCollation = [UILocalizedIndexedCollation currentCollation];
    NSMutableArray *objects = [NSMutableArray arrayWithCapacity:indexedCollation.sectionTitles.count];
    //UILocalizedIndexedCollation 系統(tǒng)的東西還是很強(qiáng)大的
    for (int i = 0; i < indexedCollation.sectionTitles.count; i++) {
    NSMutableArray *obj = [NSMutableArray array];
    [objects addObject:obj];
    }
    //26個(gè)字母排序
    for (int i = 0; i < array.count; i++) {
    NSInteger index = [indexedCollation sectionForObject:array[i] collationStringSelector:@selector(uppercaseString)];
    [[objects objectAtIndex:index] addObject:array[i]];

    }
    return objects;
    }

//漢字的拼音

  • (NSString *)pinyin{
    NSMutableString *str = [self mutableCopy];
    CFStringTransform(( CFMutableStringRef)str, NULL, kCFStringTransformMandarinLatin, NO);
    CFStringTransform((CFMutableStringRef)str, NULL, kCFStringTransformStripDiacritics, NO);

    return [[str stringByReplacingOccurrencesOfString:@" " withString:@""] lowercaseString];
    }

//然后就是把每組中的排序
NSMutableArray * nameArr = [NSString dictionaryOrderByCharacterWithOriginalArray:array];
for (NSArray * arr in nameArr) {
NSMutableArray * array = [[NSMutableArray alloc]initWithArray:arr];
NSInteger count = array.count;
for (int i = 0; i < count; i++) {
for (int j = 0; j < count - i - 1; j++) {
//這里我是把每個(gè)字符串都轉(zhuǎn)換成小寫(xiě)的拼音判斷的
if([[array[j] pinyin] compare:[array[j+1] pinyin] options:NSForcedOrderingSearch] == 1){
[array exchangeObjectAtIndex:j withObjectAtIndex:(j + 1)];
}

        }
    }
    [_nameResultArr addObject:array];
}

PS:其實(shí)還有些沒(méi)解決冗酿,比如張和章 排序出來(lái)可能就是張、章络断、張裁替。。多音字也沒(méi)做貌笨,慢慢研究吧弱判。

好吧,一般這樣了 產(chǎn)品也會(huì)向微信學(xué)習(xí)加個(gè)搜索吧...
這種模糊搜索什么的 還是用UISearchController吧
代理中

  • (void)updateSearchResultsForSearchController:(UISearchController *)searchController{
    NSLog(@"%@",searchController.searchBar.text);
    NSMutableArray * result = [[NSMutableArray alloc]init];
    for (NSArray * arr in _nameResultArr) {
    for (NSString * str in arr) {
    //這里是先判斷輸入的內(nèi)容是否是漢字锥惋,如果是的話(huà)直接找昌腰,不是的話(huà)轉(zhuǎn)成拼音找
    if ([NSString isHaveChineseInString:searchController.searchBar.text]) {
    if ([str rangeOfString:searchController.searchBar.text].location != NSNotFound) {
    [result addObject:str];
    }
    }else{
    NSString * textStr = [searchController.searchBar.text lowercaseString];
    if ([[str pinyin] rangeOfString:textStr].location != NSNotFound) {
    [result addObject:str];
    }
    }

      }
    

    }
    [_searchController.searchResult setArray:result];

    [_searchController reloadSearchResult];

}

//判斷字符串中是否含有中文

  • (BOOL)isHaveChineseInString:(NSString *)string{
    for(NSInteger i = 0; i < [string length]; i++){
    int a = [string characterAtIndex:i];
    if (a > 0x4e00 && a < 0x9fff) {
    return YES;
    }
    }
    return NO;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市膀跌,隨后出現(xiàn)的幾起案子遭商,更是在濱河造成了極大的恐慌,老刑警劉巖捅伤,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劫流,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡丛忆,警方通過(guò)查閱死者的電腦和手機(jī)祠汇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)熄诡,“玉大人可很,你說(shuō)我怎么就攤上這事』烁。” “怎么了根穷?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵姜骡,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我屿良,道長(zhǎng)圈澈,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任尘惧,我火速辦了婚禮康栈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘喷橙。我一直安慰自己啥么,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布贰逾。 她就那樣靜靜地躺著悬荣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪疙剑。 梳的紋絲不亂的頭發(fā)上氯迂,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音言缤,去河邊找鬼嚼蚀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛管挟,可吹牛的內(nèi)容都是我干的轿曙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼僻孝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼导帝!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起穿铆,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤您单,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后悴务,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡譬猫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年讯檐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片染服。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡别洪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出柳刮,到底是詐尸還是另有隱情挖垛,我是刑警寧澤痒钝,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站痢毒,受9級(jí)特大地震影響送矩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哪替,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一栋荸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凭舶,春花似錦晌块、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至身冀,卻和暖如春钝尸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闽铐。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工蝶怔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人兄墅。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓踢星,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親隙咸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沐悦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容