我正在开发一个iPhone应用程序,我从当前位于局域网本地服务器上的Web服务中获取数据。
现在我正在使用类似这样的URL获取位于本地服务器上的数据:
HTTP:\ 192.168.0.150 \服务\ service.asmx \ dataFetchingMethod
但是将来如果我的网址发生了变化,即服务器就像这样:
HTTP:\ www.anotherDomain.com \服务\ service.asmx \ dataFetchingMethod
和
HTTP:\ www.anotherURL.com \服务\ service.asmx \ dataFetchingMethod
然后我如何动态地改变它。
目前我已在应用程序中对该网址进行了硬编码...
请说明您是否有任何教程或示例..
答案 0 :(得分:2)
应用程序首选项是这样的:
- (BOOL) getDataFromWebserver
{
NSString *url = [[NSUserDefaults standardUserDefaults] stringForKey:@"dataUrl"];
if(url == nil)
{
[self setDefaultPrefs];
url = [[NSUserDefaults standardUserDefaults] stringForKey:@"dataUrl"];
}
[self fetchData:url];//to implement
}
- (void)setDefaultPrefs
{
NSDictionary *appPrefs = [NSDictionary dictionaryWithObjectsAndKeys:
@"hardCodedUrl", @"dataUrl", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:appPrefs];
[[NSUserDefaults standardUserDefaults] synchronize];
}
答案 1 :(得分:1)
您应该编写一个从文件中读取属性的类(例如plist)。
这样,只要应用程序运行,它就会从plist中读取其配置,并调用指定的服务URL。这可以在不重新编译应用程序的情况下进行更改。
答案 2 :(得分:1)
您将需要连接到某种永不改变或不经常更改的资源。我看到了几种不同的方法。
代理方法
您可以设置一个主服务器(http://masterurl.com/),将您的请求代理到另一台服务器。这里的想法是主服务器永远不会改变,但它代理的机器可能随时改变。例如:
假设您的iPhone应用程序连接到http://masterurl.com/:
在未来的某个时刻,你 需要更换 http://someotherurl.com/ http://snazzynewurl.com/ 。
现在你可以改变 http://masterurl.com/ 代理 http://snazzynewurl.com/ 。
对于您的应用程序的用户,没有任何更改,您无需更新您的应用程序并重新提交以供审核。
位置文件方法
您可以从文件中获取位置,例如txt或xml文件。
假设您的文件位于http://someurl.com/location.txt且内容很简单:
inside location.txt:
http://someotherbaseurl.com/
然后,您的应用会在此文本文件中阅读并使用http://someotherbaseurl.com/作为应用其余部分的基本网址。现在,如果您需要更改URL,则只需更新文本文件即可。
如果您采用位置文件方法,我建议使用Amazon S3或Rackspace Cloud Files托管该文件,以便通过其内容分发网络上的URL提供该文本文件。
我确信还有其他方法可以解决这个问题。无论哪种方式,您都需要一个永远或很少变化的主URL。否则,您将遇到必须重新编译并重新提交应用程序的情况。
答案 3 :(得分:1)
这不正是DNS的用途吗?您指定一个域名,可以在您喜欢的地方重新定位...在您设置域名之前调试并没有多大帮助,但现在可以设置一些内容并重新定位到您喜欢的位置。