2011-07-24 80 views
1

我有一個非常長的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"]; 

如果是這樣,是否有一個標準的方式來處理你的應用程序網址有序的方式?你使用的一些技術是什麼讓你的生活更輕鬆?

回答

0

要做到這一點絕對最簡單的方法是使用宏:

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

你甚至可以NSString * const BarUrl = FOOBAR_BASE "baz";做到這一點。

這很好,如果你有一個「服務器」。當你有多個你想從同一個應用程序訪問的服務器而沒有重新編譯(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

我有一個基本的URL,我守在MyAppDelegate:

在MyAppDelegate .h

extern NSString * const SERVER_URL; 

而且在MyAppDelegate.m

NSString *const SERVER_URL = @"http://111.11.11.1"; 

然後訪問它只是導入MyAppDelegate.h

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

我讓他們在一個字符串文件。這樣,如果本地化應用的URL不同,則可以輕鬆適應資源本地化。

+0

您的網址需要在不同的語言不同?唉... –

+0

嗯,沒有不同的語言*本身*。假設您的應用程序在日本和美國使用,並列出了一些關注該國政治的人們感興趣的網站。讓日本人看到美國政治機構的名單是沒有意義的。這不是一個很好的例子,但是想法是這些網站可能不一定有相同的內容。 –

+0

我會根據國家(使用CoreLocation/IP地址/ MCC:MNC檢測)製作清單,可能還有用戶可選的覆蓋。這意味着您不需要根據語言來猜測位置,或者爲許多英語國家(或法語/西班牙語/葡萄牙語)單獨「定位」。而且由於您無論如何都需要Web訪問,您可以將列表設置爲服務器端,因此您無需更新應用程序即可更改列表。 (另外請注意,NSLocale(「區域格式」)可能是檢測用戶所在國家的更好方法。) –

相關問題