2012-05-09 26 views
0

我正在为iPad设计一款新应用程序。这个应用程序将与条形码扫描仪一起工作,当它扫描一个代码时,它会显示一个关联的图像。将图片上传到我的应用程序

我想构建一个asociating德条形码例如图像名称: - 条形码09090909将显示09090909.png图片 - 条形码19191919将显示19191919.png图片 ....

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

任何帮助或线索?在此先感谢

回答

0

您可以简单地从您的服务器加载它们,但然后需要网络连接。加载它们异步从服务器,你可以使用此代码:如果你愿意,你也可以将图像保存到缓存目录(使用文件目录不建议,因为它会与Apples iOS Data Storage Guidelines碰撞)

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]; 
    }); 
}); 

和检查下载图像前的两倍,那么代码会是这样的:

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来管理内存。

+0

谢谢!但iPad将处于一个没有连接的地方。我们打算使用USB条形码扫描仪也是因为我们需要应用程序的速度很快,所以从服务器上下载图片现在不是一个选项.... thansk反正;) –

相关问题