存储您的应用指向外部的 URL,以便随时更改 URL
Posted
技术标签:
【中文标题】存储您的应用指向外部的 URL,以便随时更改 URL【英文标题】:Storing a URL that your app points to externally, so URL be changed anytime 【发布时间】:2013-07-29 09:03:09 【问题描述】:我的应用程序中有一个 UIImageView - *bannerImageView
,它利用了 AFNetworking 方便的 - (void)setImageWithURLRequest:placeholderImage:success:failure:
方法。
为了准备使用此方法,我必须创建一个NSURLRequest
对象,如下所示:
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.images.com/image.png"]];
问题:
有没有一种方法可以存储这个 url(我正在考虑在一个文本文件中?) 在线某处,我的应用程序将始终指向以查找要请求的 URL?
原因是由于我正在开发的项目的某些情况,我将来需要相当频繁地更改图像的 URL,并且为此目的而必须推送整个应用程序更新是没有意义的.
附:在我的- (void)viewDidLoad
中,我有一行代码启动networkActivityIndicator - [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
。有没有更好的地方让我插入此代码,而不是在每次视图加载时启动 networkActivityIndicator,并且只在 - (void)setImageWithURLRequest:placeholderImage:success:failure:
的成功块中停止它方法?
感谢您的帮助!
【问题讨论】:
【参考方案1】:如果我理解正确,则必须为所有用户全局更改徽标。如果是这样,并且如果您在服务器端拥有完全控制权,那么您有两个选择:
使用 php 或任何服务器端语言,创建一个非常小的代理,将通用图像名称透明地映射到适当的资源,这在 ios 端需要很少或不需要代码,而在服务器端则需要更多代码。对于最小代理,我的意思是,您调用一个资源,比如说http://www.yourserver.com/imagelocator.php,它正在后台检索您的图像,然后通过设置适当的标头将其提供给您的客户端。您需要编写几行代码,具体取决于所使用的服务器端语言。 实现 307 重定向,并使用 iOS 进行管理,这在服务器端需要很少的代码,而在 iOS 端需要更多的代码。这与您关于 txt 文件的解决方案类似,但在我看来更优雅。如果你有 apache,你可以创建一个包含所有你需要的规则的 .htaccess 文件。如果您查看 iOS NSURLConnection,您会发现通过解释 HTTP 状态代码,您可以处理重定向。在这种情况下,如果 iOS 请求 http://www.yourserver.com/logo.png,服务器本身会使用新地址 http://www.thenewserver.com/logo.png 进行响应在这两种情况下,请记住使用正确的过期http头,让iOS不时检查。
顺便说一句,正如我所说,您检查 txt 文件的解决方案是完全有效的。但即使在这种情况下,请记住在此类 http 请求上设置过期标头,可能使用“无缓存”。
【讨论】:
是的,我有一个横幅 (UIImageView),它始终指向指向retrieve
和 set
其图像的 URL,并且 URL 不时更改。这就是为什么我需要能够从外部访问 URL,而不是将 URL 硬编码到应用程序本身中。目前我对如何实现这一点一无所知,因为我是 iOS 开发的新手。对于我对服务器端编程的无知,我深表歉意,但即使经过一番谷歌搜索,我也不明白“最小代理”或“307 重定向”是什么。我可以使用像 Parse 这样的 BaaS 吗?
添加了一些解释【参考方案2】:
我找到了一种在移动 BaaS(后端即服务)的帮助下实现这一目标的相当简单的方法。我决定使用Parse。
在许多可用的功能中,我使用了数据浏览器,以下是我所做的示例:
-
创建了一个名为
Advertisement
的类
创建了一个名为 AdURL
的字符串列*(以及我需要的与该对象相关的任何信息,例如 AdName 或 AdImage 等及其各自的数据类型)*。
将 URL 值插入到 AdURL
列中。
按回车键,将创建一个新对象(行)。该对象将具有一个唯一的 ObjectID,该 ID 将自动为您生成。
现在,我只需将 Parse SDK 集成到我的项目中,并使用其各自的 ObjectID 查询我在上面创建的任何类的对象/值。
以后,如果我需要更改值(在这种情况下,用户点击 UIButton 时将在 Safari 中打开的 URL),我只需要返回 Parse 的数据浏览器来更改该特定值,并且更改将立即反映出来,因为每次应用需要查找该值时,它都会为该类、对象和指定列的值创建一个新查询。
这是我的应用程序中的查询代码示例:
- (IBAction)bannerBtnTapped:(id)sender
// Create PFQuery object.
PFQuery *query = [PFQuery queryWithClassName:@"EXAMPLECLASS"];
[query getObjectInBackgroundWithId:@"EXAMPLEOBJECTID" block:^(PFObject *object, NSError *error)
// "object" will be the row that is returned according to your specified class and ObjectID. Assigned the returned value to an NSURL var "*url"
NSURL *url = [NSURL URLWithString:object[@"EXAMPLECOLUMNNAME"]];
// Open the url in Safari.
[[UIApplication sharedApplication] openURL:url];
];
希望这个简单的解决方案能在未来对某人有所帮助!
【讨论】:
【参考方案3】:您可以使用苹果的 iCloud 来存储该 URL。
然后,您可以使用 eNSUbiquitousKeyValueStoreDidChangeExternallyNotification
跟踪更改。可以查看apple's documentation
【讨论】:
以上是关于存储您的应用指向外部的 URL,以便随时更改 URL的主要内容,如果未能解决你的问题,请参考以下文章