0

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

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

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


问题:

有没有一种方法可以在线存储此 url (我正在考虑在文本文件中?),我的应用程序将始终指向以查找要请求的 URL?

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


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


谢谢你的帮助!

4

3 回答 3

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 请求上设置过期标头,可能使用“无缓存”。

于 2013-07-29T14:00:43.960 回答
0

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

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

  1. 创建了一个名为Advertisement
  2. 创建了一个名为AdURL* 的字符串列(以及我需要的与该对象相关的任何信息,例如 AdName 或 AdImage 等及其各自的数据类型)*。
  3. 将 URL 值插入到AdURL列中。
  4. 按回车键,将创建一个新对象(行)。该对象将具有一个唯一的 ObjectID,它将自动为您生成。
  5. 现在,我只需要将 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];
     }];
}

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

于 2013-08-17T02:06:36.197 回答
-1

您可以使用苹果的 iCloud 来存储该 URL。然后,您可以使用 e 跟踪更改NSUbiquitousKeyValueStoreDidChangeExternallyNotification。你可以查看 苹果的文档

于 2013-07-29T09:10:15.067 回答