0

iPad 用の新しいアプリを設計しています。このアプリはバーコード スキャナーで動作し、コードをスキャンすると、関連付けられた画像が表示されます。

たとえば、バーコードを画像名に関連付けることを考えていました。

それは問題ないと思いますが、アプリに新しいバーコード/写真を追加する必要がある場合に問題が発生します。アプリに新しい写真を送信するにはどうすればよいですか? XCode で開発してアプリをビルドすると、すべてのデータがアプリに入ることがわかります。

助けや手がかりはありますか?前もって感謝します

4

1 に答える 1

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

必要に応じて、画像をキャッシュディレクトリに保存し(ドキュメントディレクトリを使用することはお勧めしません。AppleiOSデータストレージガイドラインと衝突するため)、画像を2回ダウンロードする前に確認すると、コードは次のようになります。

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に依存していることに注意してください。

于 2012-05-09T09:27:36.090 に答える