2011-07-24 32 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(“区域格式”)可能是检测用户所在国家的更好方法。) –

相关问题