首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

iOS 通訊錄排序後數據錯亂:模型數組整體排序而非單獨排序名字字段

     編輯:程式設計疑難解答

問題現象

自定義通訊錄,將模型數組中 `name` 字段單獨提取排序後重新賦值,導致名字與電話、郵箱等其他信息錯位不匹配。

錯誤代碼示例

// 錯誤做法
NSArray *names = [models valueForKey:@"name"];
NSArray *sortedNames = [names sortedArrayUsingSelector:@selector(localizedStandardCompare:)];
// 再嘗試按 sortedNames 重組模型 → 索引錯亂

正確做法:模型整體排序

// 正確做法:直接對模型數組排序,保持對象完整性
NSArray *sortedModels = [models sortedArrayUsingComparator:^NSComparisonResult(ContactModel *m1, ContactModel *m2) {
    return [m1.name localizedStandardCompare:m2.name];
}];

// Swift 版
let sortedModels = models.sorted { $0.name.localizedStandardCompare($1.name) == .orderedAscending }

進階:分組索引(UITableView 索引列表)

  1. 排序後遍歷模型,按首字母(拼音首字母/英文首字母)分組成 `Dictionary`。
  2. Section 標題取字母,Row 數取對應組數量。
  3. `sectionIndexTitlesForTableView` 返回排序後的字母數組。

核心原則

數據模型是不可分割的整體。任何排序、篩選、分組操作都應針對模型對象本身,而非拆解字段單獨操作。這也是 MVC/MVVM 中 Model 職責的體現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved