2011-08-10 7 views
5

私はユーザーのアプリケーションのバージョン番号を取得し、私のサーバー上の現在のアプリケーションのバージョンと比較する必要があります。ユーザーのアプリのバージョンが低い場合、彼は自分のアプリを更新するためのポップアップを取得します。これを実行している間、私は、アプリケーションのバージョンと利用可能なバージョンを比較する必要があります。 Objective-Cで​​と"2.0.09"という形式の文字列を比較して最高の文字列を取得するにはどうすればよいですか?"2.0.1"、 "2.0.09"の形式の文字列を比較

答えて

5

これはテストしていません(現在はOS Xではありません)。これは暗闇の中で完全なショットです。 NSStringクラスのcompare:options:メソッドの使用はどうですか?

NSString *v1 = "2.0.1"; 
NSString *v2 = "2.1"; 

NSComparisonResult *r= [v1 compare:v2 options:NSNumericSearch]; 
if (r == NSOrderedSame || r == NSOrderedDescending) { 
    // do 
} else { 
    // do 
} 

これは機能しますか?右のオプションであるとして、あなたがちょうどそれらを比較することができ

4

あなたの文字列は、フォームのすべての場合は、「2.0.1」など:localVersionが否定である場合

([localVersionString compare:currentVersionString 
        options:NSNumericSearch] != NSOrderedAscending); 

上記は「YES」を返しますサーバ上のcurrentVersionよりも古いもの、そうでなければ "NO"(私はこれが正しい方法で丸められていると仮定します)。

これは、iDeviceにインストールされているiOSのローカルバージョンを確認するときに行う通常の処理です。

+0

NSNumericSearchは手動で行うよりもはるかに良い選択肢です。 – benzado

3

この投稿に回答したように。 Compare version numbers in Objective-C

githubの簡単なバージョンチェックを実装しているNSStringカテゴリをチェックしてください。 https://github.com/stijnster/NSString-compareToVersion

[@"1.2.2.4" compareToVersion:@"1.2.2.5"]; 

これは、使用して、より正確であるNSComparisonResultを返します。

[@"1.2.2" compare:@"1.2.2.5" options:NSNumericSearch] 

ヘルパも追加されました。

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

Stijnsterに感謝します。あなたのカテゴリーはすばらしいですが、すぐにスウィフトバージョンが本当に必要になるでしょう... – wuf810