存储您的应用指向外部的网址,以便随时更改网址

时间:2013-07-29 09:03:09

标签: ios objective-c uiimageview afnetworking parse-platform

我的应用程序中有一个UIImageView - *bannerImageView,它使用 AFNetworking 方便的 - (void)setImageWithURLRequest:placeholderImage:success:failure: 方法。

为准备使用此方法,我必须创建一个NSURLRequest对象,如下所示:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.images.com/image.png"]];


问题:

有没有办法可以存储这个网址(我想在一个文本文件中?)在网上某个地方,我的应用总是会指向寻找要求的网址?< / p>

原因是由于我正在开发的项目的某些情况,我需要在将来更频繁地更改图像的URL,并且为此目的必须推送整个应用更新没有意义


P.S。在我的- (void)viewDidLoad中,我有一行代码启动 networkActivityIndi​​cator - [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;。我是否有更好的位置插入此代码,而不是每次加载视图时启动 networkActivityIndi​​cator ,并且只在 - (void)setImageWithURLRequest:placeholderImage:success:failure:的成功块中停止强>方法?


谢谢你的帮助!

3 个答案:

答案 0 :(得分: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请求上设置过期标头,也许是“无缓存”。

答案 1 :(得分:0)

我已经找到了一种在移动BaaS(后端即服务)的帮助下实现这一目标的简单方法。我决定使用Parse

在那里可用的许多功能中,我使用了数据浏览器以下是我所做的一个例子:

  1. 创建了一个名为 Advertisement
  2. 的类
  3. 创建了一个名为 AdURL *的字符串列(以及我需要的与该对象相关的任何信息,例如AdName或AdImage等及其各自的数据类型)*。
  4. 将网址值插入 AdURL 列。
  5. 按Enter键,将创建一个新对象(行)。该对象将具有一个将自动为您生成的唯一ObjectID。
  6. 现在,我只需要将Parse SDK集成到我的项目中,并查询我在上面用其各自的ObjectID创建的任何类别的对象/值。
  7. 将来,如果我需要更改值(在这种情况下,当用户点击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];
         }];
    }
    

    希望这个简单的解决方案能帮助将来的某个人!

答案 2 :(得分:-1)

您可以使用Apple的iCloud存储该网址。 然后,您可以使用e NSUbiquitousKeyValueStoreDidChangeExternallyNotification跟踪更改。您可以查看apple's documentation