コンテンツの自動更新

最終更新: 2013/7

このチュートリアルではコンテンツの自動更新方法について学びます。
command.cgiファイルアップデート情報の取得 を使用して、FlashAirの更新情報を取得し、同時にコンテンツの更新も行うアプリケーションを作成します。

メモ: このチュートリアルの学習効果を高めるため、FlashAirをお手持ちのデジタルカメラに挿入することをお勧めします。
新しい写真を撮影したり、撮影済みの写真を削除すると、このアプリケーションにFlashAirの変更内容が反映されます。

このチュートリアルは別項の iOS Tutorial 4:サムネイルの表示 に基づいています。
それではさっそく作ってみましょう。

画面レイアウトの作成

今回作成するアプリケーションの画面レイアウトについては別項の iOS Tutorial 4:サムネイルの表示 を確認してください。

コードの作成

ファイルアップデート情報の取得

コンテンツの自動更新を行うには、まず command.cgiop=102 を使用します。
このCGIを使用すると、FlashAirのコンテンツが更新されているかどうかを知ることができます。
別スレッドを立てて、このCGIを数秒おきに実行し、確認を行います。
CGIの実行には、 NSString stringWithContentsOfURL を使用しています。 この関数は、指定されたエンコーディングの文字列(ここではUTF-8)と、発生した例外を返します。

FSViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    [self getFileList:@"/DCIM"];

    // Start updateCheck
    [NSThread detachNewThreadSelector:@selector(updateCheck) toTarget:self withObject:nil];
}

- (void)updateCheck
{
    bool status = true;
    NSError *error = nil;
    NSString *path,*sts;
    NSURL *url102 = [NSURL URLWithString:@"http://flashair/command.cgi?op=102"];

    while (status)
    {
        // Run cgi
        sts =[NSString stringWithContentsOfURL:url102 
                                            encoding:NSUTF8StringEncoding error:&error];
        if ([error.domain isEqualToString:NSCocoaErrorDomain]){
            NSLog(@"error102 %@\n",error);
            status = false;
        }else{
            // If flashair is updated then reload
            if([sts intValue] == 1){
                path = [self.labelDirectory.text 
                                    substringToIndex:[self.labelDirectory.text length] - 1];
                [self performSelectorOnMainThread:@selector(reloadView:) 
                                                        withObject:path waitUntilDone:YES];
            }
        }
        [NSThread sleepForTimeInterval:0.1f];        
    }
}

- (void) reloadView:(NSString *)path {
    [self getFileList:path];
    [self.tableViewFileList reloadData];
}
  • 8-9行目
    ここで別スレッドを立ち上げ、立ち上げたスレッドで updateCheck()を実行しています。
  • 17行目
    使用するURLです。
    op=102 を設定します。
  • 21-23行目
    CGIが実行されます。
    返される文字のエンコードは、ここでは UTF-8 を使用します。
    encoding:NSUTF8StringEncoding を指定しています。
  • 32-33行目
    Table View の更新はメインスレッドから行う必要があるので、メインスレッドに更新処理を依頼しています。
  • 41-42行目
    メインスレッドに依頼する更新処理です。

実行結果

プログラムが出来上がったら、結果を確認をしてみましょう。

現在のコンテンツ数が、 11 と表示されていることも確認しておきます。

(実行前)

FlashAirを挿入している別の機器から、ファイルを追加してみます。
カメラに挿入している場合は、写真を1枚撮影してみましょう。

該当のコンテンツが増え、現在のコンテンツ数も、 12 と表示されました。

(結果1)

コンテンツリストを選択し、追加されたイメージファイルの確認もしてみましょう。

(結果2)

表示されました。
以上で、コンテンツの自動更新 に関する解説はおわりです。

サンプルコード

ios_tutorial_05.zip (25KB)

このサイトのサンプルコードは 二条項BSDライセンスで提供されています。