2011-08-10 34 views
5

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""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

5

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?

4

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.

+0

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

3

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"]; 
+0

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