Tôi cần nhận số phiên bản ứng dụng của người dùng và so sánh nó với phiên bản ứng dụng hiện tại trên máy chủ của tôi. Nếu phiên bản ứng dụng của người dùng thấp hơn, thì anh ấy sẽ nhận được cửa sổ bật lên để cập nhật ứng dụng của anh ấy. Trong khi làm điều này, tôi cần phải so sánh phiên bản của ứng dụng với các phiên bản có sẵn. Làm thế nào tôi có thể so sánh các chuỗi có định dạng "2.0.1"
và "2.0.09"
và nhận được chuỗi cao nhất, trong Mục tiêu-C?So sánh các chuỗi có định dạng "2.0.1", "2.0.09"
Trả lời
Tôi chưa thử nghiệm này (không phải trên OS X bây giờ) vì vậy đây là một shot hoàn chỉnh trong bóng tối. Làm thế nào về việc sử dụng phương pháp compare:options:
của lớp NSString?
NSString *v1 = "2.0.1";
NSString *v2 = "2.1";
NSComparisonResult *r= [v1 compare:v2 options:NSNumericSearch];
if (r == NSOrderedSame || r == NSOrderedDescending) {
// do
} else {
// do
}
Điều đó có hiệu quả không?
Nếu dây của bạn tất cả các hình thức "2.0.1" vv bạn chỉ có thể so sánh chúng như là với các tùy chọn bên phải:
([localVersionString compare:currentVersionString
options:NSNumericSearch] != NSOrderedAscending);
Trên đây sẽ quay trở lại "YES
" nếu localVersion không cũ hơn currentVersion trên máy chủ và "NO
" nếu không (giả sử tôi có vòng tròn đúng).
Đây là việc bình thường để thực hiện khi kiểm tra phiên bản iOS cục bộ được cài đặt trên iDevice.
Như đã trả lời trong bài đăng này; Compare version numbers in Objective-C
Kiểm tra danh mục NSString của tôi triển khai kiểm tra phiên bản dễ dàng trên github; https://github.com/stijnster/NSString-compareToVersion
[@"1.2.2.4" compareToVersion:@"1.2.2.5"];
này sẽ trả về một NSComparisonResult đó là chính xác hơn sau đó sử dụng;
[@"1.2.2" compare:@"1.2.2.5" options:NSNumericSearch]
Người trợ giúp cũng được thêm vào;
[@"1.2.2.4" isOlderThanVersion:@"1.2.2.5"];
[@"1.2.2.4" isNewerThanVersion:@"1.2.2.5"];
[@"1.2.2.4" isEqualToVersion:@"1.2.2.5"];
[@"1.2.2.4" isEqualOrOlderThanVersion:@"1.2.2.5"];
[@"1.2.2.4" isEqualOrNewerThanVersion:@"1.2.2.5"];
cảm ơn Stijnster, danh mục của bạn thật tuyệt… nhưng thực sự cần một phiên bản Swift sớm… – wuf810
- 1. so sánh ngày ở định dạng Chuỗi
- 2. So sánh các phiên bản dưới dạng chuỗi
- 3. So sánh số có nhanh hơn so sánh chuỗi không?
- 4. So sánh chuỗi PostgreSQL
- 5. so sánh các chuỗi trong vb
- 6. So sánh chuỗi trong .Net: "+" so với "-"
- 7. so sánh các chuỗi trong bash
- 8. So sánh các chuỗi trong Go
- 9. chuỗi so sánh phần
- 10. so sánh chuỗi bash
- 11. So sánh các chuỗi trong Java
- 12. So sánh các chuỗi và mảng C#
- 13. So sánh các chuỗi trong EL
- 14. So sánh các chuỗi ngày tháng trong Java
- 15. So sánh chuỗi. Làm thế nào bạn có thể so sánh chuỗi với std :: wstring? WRT strcmp
- 16. So sánh Mã định danh
- 17. So sánh và so sánh số nguyên chuỗi PHP Weird
- 18. So sánh một chuỗi có chuỗi rỗng (Java)
- 19. So sánh các chuỗi phiên bản trong groovy
- 20. python: so sánh hai chuỗi
- 21. chuỗi So sánh với JSTL
- 22. Complex "Chứa" chuỗi so sánh
- 23. C# So sánh các chuỗi với trường hợp khác nhau
- 24. So sánh chuỗi ID với BSON :: ObjectId
- 25. Cách so sánh một chuỗi so với nhiều chuỗi khác
- 26. So sánh các chuỗi ngày tháng ISO 8601 trong javascript
- 27. phương pháp DateTime.TryParseExact để so sánh chuỗi
- 28. Chuỗi câu lệnh .NET C# switch so sánh với enum so sánh
- 29. So sánh các chuỗi giống hệt cho tôi false
- 30. Toán tử so sánh cho chuỗi C
NSNumericSearch là một lựa chọn tốt hơn nhiều so với thực hiện thủ công. – benzado