2011-07-24 10 views
1

私は、アプリケーションがサーバーからデータを取得するために使用する非常に長いURLリストを持っています。現在、各URLはすなわち、自分の定数を持っていますアプリのURLを適切に管理するにはどうすればよいですか?

// constants.h 
extern NSString * const profileUrl; 

// constants.m 
NSString * const profileUrl = @"http://api.site.com/profile"; 
. 
. 

それは契約のその大きなではないのですが、私はベースURLを変更したい場合、私は中に入ると、手動で各定数でそれらのすべてを交換する必要が。もし私ができればDRY哲学(あなた自身を繰り返さないでください)を守りたいと思います。私は可能な以下のようなものです。

// constants.h 
extern NSString * const baseUrl; 
extern NSString * const profileUrl; 

// constants.m 
NSString * const baseUrl = @"http://api.site.com/"; 
NSString * const profileUrl = [NSString stringWithFormat:@"%@%@", baseUrl, @"profile"]; 

もしそうなら、規則正しくアプリのURLを処理する標準的な方法はありますか?このような状況のためにあなたの人生を楽にするテクニックは何ですか?

答えて

0

これを行うには絶対的な最も簡単な方法は、マクロである:

#define FOOBAR_BASE @"http://www.example.com/" 
#define FOOBAR_API_BAZ FOOBAR_BASE "baz" 

あなたもNSString * const BarUrl = FOOBAR_BASE "baz";でこれを行うことができます。

「サーバー」が1つの場合は、これは問題ありません。再コンパイルせずに同じアプリケーションからアクセスしたい複数のサーバがある場合(dev/production?)、処理が面倒になります。これを行い、私たちは継承されたコードベースの至る所に散らばっリテラル文字列よりも多くの優れている巨大なヘッダファイルを、持っている我々のアプリの一つで

...

+0

これは私の状況にとって最も洗練されたソリューションのようです。どうもありがとうございました! – Ken

0

ちょうど使用:

NSDictionary *profileURLS = [NSDictionary dictionaryWithValues:[NSArray yourArrayOfProfileURLS] forKeys:[NSArray yourArrayOfCorrespondingProfiles]]; 

NSString *baseURL = @"baseURLHere"; 
NSString *newURL = [baseURL stringByAppeningString:[profileURLS valueForKey: profileName]]; 

私は、これはあなたが何をしているかのために働くべきだと思う私が正しく

0

あなたを理解していれば、私はMyAppDelegateに保つベースURLがあります。MyAppDelegateで

を.h

extern NSString * const SERVER_URL; 

およびMyAppDelegate.m

01その後
NSString *const SERVER_URL = @"http://111.11.11.1"; 

ちょうど私が、文字列のファイルに保管してくださいMyAppDelegate.h

NSString *url = [SERVER_URL stringByAppendingString:@"/your_request"]; 
0

をインポートし、それをアクセスします。こうすることで、ローカライズされたアプリケーションのURLが異なる場合でも、リソースのローカライズに対応するのは簡単です。

+0

あなたのURLは、異なる言語で異なる必要があります?一口... –

+0

まあ、別の言語ではない*それ自体*。あなたのアプリが日本と米国で使用され、その国の政治に従った人々のための興味のあるウェブサイトがいくつかリストアップされているとしましょう。日本の人々にアメリカの政治機関のリストを見せることは意味がありません。これは素晴らしい例ではありませんが、これらのウェブサイトが必ずしも同じ内容を持っているとは限りません。 –

+0

私は国(CoreLocation/IPアドレス/ MCC:MNCで検出された)に基づいてリストを作成し、場合によってはユーザが選択できるようにしました。つまり、多くの英語圏の国(またはフランス語/スペイン語/ポルトガル語)では、言語に基づいて位置を推測したり、別の「ローカリゼーション」を行う必要はありません。とにかくWebアクセスが必要なので、リストを変更するためにアプリケーションを更新する必要がないように、リストをサーバー側にすることができます。 (NSLocale( "Region Format")はおそらくユーザーの国を検出するためのより良い方法です)。 –

関連する問題