2010-01-06 6 views

Trả lời

78

Cảm ơn bạn đã trả lời của bạn, nhưng tôi cần phải sắp xếp các kết quả của một "truy vấn" đơn giản bỏ qua trường hợp. Đề xuất của bạn áp dụng cho việc tìm kiếm và so sánh.

Nói SQL, tôi cần một số ORDER BY firstName ASC và lệnh này phải phân biệt chữ hoa chữ thường cho việc sử dụng của tôi.

Tôi đã thực hiện một số Googling và tôi đã kết thúc đọc NSSortDescriptor Class reference và tôi có thể tìm thấy câu trả lời cho câu hỏi của mình. Giải pháp là đặt bộ chọn cho bộ mô tả sắp xếp như sau:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES selector:@selector(caseInsensitiveCompare:)]; 

Tôi hy vọng nó sẽ hữu ích cho nhiều người hơn.

+0

Đừng quên rằng dấu hai chấm sau caseInsensitiveCompare: –

+5

Tôi đã thử nghiệm điều này với [SQL logging enabled] (http://stackoverflow.com/a/6428693/1402846). Hóa ra iOS đủ thông minh để thực hiện sắp xếp trong SQL thay vì trong bộ nhớ, bằng cách đặt 'COLLATE NSCollateNoCase', hoặc' COLLATE NSCollateLocaleSensitiveNoCase' cho 'localizedCaseInsensitiveCompare:', sau 'ORDER BY'. Được thử nghiệm trên trình mô phỏng với iOS 6 và thiết bị có iOS 7. – Pang

+1

Đối với những người bạn tìm kiếm giải pháp xCode 7 và Swift: '[NSSortDescriptor (key:" string ", tăng dần: true, selector: #selector (NSString.caseInsensitiveCompare) (_ :)))] ' – glenstorey

5

Kiểm tra các NSPredicate programming guide, nhưng về cơ bản sử dụng [c] để bỏ qua trường hợp:

@"firstName BEGINSWITH[c] $FIRST_NAME" 
+0

Hey Ben, Cảm ơn bạn! Tôi có thể tìm câu trả lời cho câu hỏi của mình. Tôi đã đăng nó ở đây. Chúc mừng, VFN – vfn

10

Nếu ứng dụng được bản địa hóa bằng nhiều ngôn ngữ, vui lòng xem xét sử dụng bộ chọn localizedCaseInsensitiveCompare: thay vì caseInsensitiveCompare. Nó sẽ có tác dụng để tránh chữ 'é' sau chữ 'e'.

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]; 
4

Swift Version:

let sortDescriptor = NSSortDescriptor(key: "firstName", ascending: true, selector: #selector(NSString.localizedCaseInsensitiveCompare))