将图片上传到我的应用

时间:2012-05-09 09:02:12

标签: objective-c xcode ipad

我正在为iPad设计一款新应用。这个应用程序将与条形码扫描仪一起使用,当它扫描代码时,它将显示相关的图像。

我正在考虑建立将条形码作为图像名称的依据:例如:   - 条形码09090909将显示09090909.png图片   - 条形码19191919将显示19191919.png图片 ....

我认为没有问题,但是当我需要向应用添加新的条形码/图片时问题就出现了。如何将新图片发送到我的应用程序?我看到,当您在XCode上开发并构建App时,所有数据都会进入de App。

任何帮助或线索?提前谢谢

1 个答案:

答案 0 :(得分:0)

您可以从服务器上轻松加载它们,但是需要网络连接。要从服务器加载它们异步,您可以使用以下代码:

dispatch_queue_t image_queue = dispatch_queue_create("com.company.app.imageQueue", NULL);
dispatch_queue_t main_queue = dispatch_get_main_queue();

dispatch_async(image_queue, ^{
  NSString *URLString = @"http://example.com/images/19191919.png";
  NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:URLString];
  UIImage *image = [UIImage imageWithData:imageData];
  dispatch_async(main_queue, ^{
    [imageView setImage:image];
  });
});

如果你想要你也可以将图像保存到缓存目录(建议不要使用文档目录,因为它会与Apples iOS Data Storage Guidelines冲突)并在下载图像两次之前检查,然后代码看起来像这样:

NSString *fileName = @"19191919.png";
NSString *URLBaseString = @"http://example.com/images/";
NSString *URLString = [URLBaseString stringByAppendingString:fileName];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [paths  objectAtIndex:0];
NSString  *dataPath = [cachePath stringByAppendingPathComponent:fileName];
NSFileManager *fileManager = [NSFileManager defaultManager];

if ( [fileManager fileExistsAtPath:dataPath] )
{
   UIImage *image = [UIImage imageWithContentsOfFile:dataPath];
   [imageView setImage:image];
}
else
{
  dispatch_async(image_queue, ^{
    NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:URLString];
    UIImage *image = [UIImage imageWithData:imageData];
    [UIImagePNGRepresentation(image) writeToFile:dataPath atomically:YES];
    dispatch_async(main_queue, ^{
      [imageView setImage:image];
    });
  });
}

此代码尚未经过测试,但应该可以使用。请注意,我依靠ARC来管理内存。