KiiObject の取得

Kii Cloud 上に登録された KiiObject を取得する方法には、ID や URI によって特定の KiiObject 1 つを指定する方法と、KiiObject の検索 によって Bucket 内で条件に一致した KiiObject をまとめて取得する方法があります。ここでは IR や URI を使って取得する方法を示します。

いずれの場合も、取得した KiiObject を参照することで、その KiiObject 内に保存されたキーと値のペア等のデータを取得できます。取得した KiiObject からキーと値のペアを取得する方法は、キーと値のペアの取得 を参照してください。

ID や URI によって KiiObject を取得するには、KiiObject を作成した際に ID や URI を取得し、どこかに保存しておく必要があります。次回、同じ KiiObject を参照する必要が生じた際に、保存しておいた ID や URI を使って KiiObject を取得できます。

ID と KiiObject

KiiObject の ID を取得

既存 KiiObject の uuid プロパティより、この KiiObject の ID を取得します。

Swift:

// Get the ID of an existing KiiObject.
let id = object!.uuid

Objective-C:

// Get the ID of an existing KiiObject.
NSString *id = object.uuid;

ID を使って KiiObject を参照

ID を指定して取得したい Bucket の createObject(withID:) メソッドを実行し、KiiObject のインスタンスを生成します。

Swift:

  • // Instantiate a KiiObject in a bucket "_app_bucket_" in the application scope.
    let bucket = Kii.bucket(withName: "_app_bucket_")
    let object = bucket.createObject(withID: id)
    
    do {
      // Refresh the KiiObject to retrieve the latest data from Kii Cloud.
      try object.refreshSynchronous()
    } catch let error as NSError {
      // Handle the error.
      return
    }
  • // Instantiate a KiiObject in a bucket "_app_bucket_" in the application scope.
    let bucket = Kii.bucket(withName: "_app_bucket_")
    let object = bucket.createObject(withID: id)
    
    // Refresh the KiiObject to retrieve the latest data from Kii Cloud.
    object.refresh { (object : KiiObject?, error : Error?) -> Void in
      if error != nil {
        // Handle the error.
        return
      }
    }

Objective-C:

  • NSError *error = nil;
    
    // Instantiate a KiiObject in a bucket "_app_bucket_" in the application scope.
    KiiBucket *bucket = [Kii bucketWithName:@"_app_bucket_"];
    KiiObject *object = nil;
    @try {
      object = [bucket createObjectWithID:id];
    }
    @catch (NSException *exp) {
      // The KiiObject ID is invalid.
      return;
    }
    
    // Refresh the KiiObject to retrieve the latest data from Kii Cloud.
    [object refreshSynchronous:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
  • NSError *error = nil;
    
    // Instantiate a KiiObject in a bucket "_app_bucket_" in the application scope.
    KiiBucket *bucket = [Kii bucketWithName:@"_app_bucket_"];
    KiiObject *object = nil;
    @try {
      object = [bucket createObjectWithID:id];
    }
    @catch (NSException *exp) {
      // The KiiObject ID is invalid.
      return;
    }
    
    // Refresh the KiiObject to retrieve the latest data from Kii Cloud.
    [object refreshWithBlock:^(KiiObject *object, NSError *error) {
      if (error != nil) {
        // Handle the error.
        return;
      }
    }];

KiiObject の ID は Bucket 内だけで一意となるため、KiiObject インスタンスの生成は上記の例のように明示的に対象 Bucket を指定して行います。なお設計上、Bucket が異なると同一の ID が取得されることがあります。関連する情報は オブジェクトの ID と URI をご覧ください。

なお、Kii Cloud が割り当てた ID は UUID 形式ですが、KiiObject 作成時にアプリ側で ID を指定した場合はこの限りではありません(指定時の形式の ID となります)。

インスタンス生成後、この KiiObject のキーと値のペアにアクセスする前に refresh(_:) メソッドを実行します。refres(_:) メソッドを実行すると Object の最新データが Kii Cloud より取得され、KiiObject の中身がこの内容に更新されます。KiiObject のインスタンスを生成しただけでは、KiiObject の中身は最新のものにならない点に注意してください。

URI と KiiObject

KiiObject の URI を取得

既存 KiiObject の objectURI プロパティより、この KiiObject の URI を取得します。

Swift:

// Get the URL of an existing KiiObject.
let uri = object!.objectURI

Objective-C:

// Get the URL of an existing KiiObject.
NSString *uri = object.objectURI;

URI を使って KiiObject を参照

URI を指定して KiiObject(URI:) メソッドを実行し、KiiObject のインスタンスを生成します。

Swift:

  • // Instantiate a KiiObject.
    let object = KiiObject(uri: uri)!
    
    do {
      // Refresh the KiiObject to retrieve the latest data from Kii Cloud.
      try object.refreshSynchronous()
    } catch let error as NSError {
      // Handle the error.
      return
    }
  • // Instantiate a KiiObject.
    let object = KiiObject(uri: uri)!
    
    // Refresh the KiiObject to retrieve the latest data from Kii Cloud.
    object.refresh { (object : KiiObject?, error : Error?) -> Void in
      if error != nil {
        // Handle the error.
        return
      }
    }

Objective-C:

  • NSError *error = nil;
    
    // Instantiate a KiiObject.
    KiiObject *object = [KiiObject objectWithURI:uri];
    
    // Refresh the KiiObject to retrieve the latest data from Kii Cloud.
    [object refreshSynchronous:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
  • NSError *error = nil;
    
    // Instantiate a KiiObject.
    KiiObject *object = [KiiObject objectWithURI:uri];
    
    // Refresh the KiiObject to retrieve the latest data from Kii Cloud.
    [object refreshWithBlock:^(KiiObject *object, NSError *error) {
      if (error != nil) {
        // Handle the error.
        return;
      }
    }];

KiiObject の URI には KiiObject が属する Bucket の情報が含まれています。このため、上記の例のようにインスタンス生成時に対象 Bucket の指定は不要です。関連する情報は オブジェクトの ID と URI をご覧ください。

インスタンス生成後、この KiiObject のキーと値のペアにアクセスする前に refresh(_:) メソッドを実行します。refresh(_:) メソッドを実行すると KiiObject の最新データが Kii Cloud より取得され、KiiObject の中身がこの内容に更新されます。KiiObject のインスタンスを生成しただけでは、KiiObject の中身は最新のものにならない点に注意してください。

特に KiiObject(URI:) メソッドを実行した場合、refresh(_:) メソッドを実行するまでこの KiiObject の ID は設定されていない状態です。ID の取得は、必ず refresh(_:) メソッドを実行してから行ってください。