KiiObject の作成
ここでは、KiiObject を新規に作成する方法を説明します。KiiObject の内部に格納する JSON ドキュメントを設定する方法は、キーと値のペアの設定 を参照してください。
KiiObject の作成
KiiObject の作成を行うには、保存先 Bucket の createObject()
メソッドを呼び出してクライアント側で KiiObject を作成した後、save(_:)
メソッドを呼び出します。作成された KiiObject の ID は、Kii Cloud によって自動的に割り当てられます。
Swift:
-
let bucket = KiiUser.currentUser()!.bucketWithName("MyBucket") // Create a KiiObject in the application-scope bucket. let object = bucket.createObject() // Set key-value pairs. object.setObject(NSNumber(value: 987 as Int32), forKey: "score") object.setObject("easy", forKey: "mode") object.setObject(NSNumber(value: false as Bool), forKey: "premiumUser") do{ // Save the KiiObject. try object.saveSynchronous() } catch let error as NSError { // Handle the error. return }
-
let bucket = KiiUser.currentUser()!.bucketWithName("MyBucket") // Create a KiiObject in the application-scope bucket. let object = bucket.createObject() // Set key-value pairs. object.setObject(NSNumber(value: 987 as Int32), forKey: "score") object.setObject("easy", forKey: "mode") object.setObject(NSNumber(value: false as Bool), forKey: "premiumUser") // Save the KiiObject. object.save { (object : KiiObject?, error : Error?) -> Void in if (error != nil) { // Handle the error. return } }
Objective-C:
-
KiiBucket *bucket = [[KiiUser currentUser] bucketWithName:@"MyBucket"]; NSError *error = nil; // Create a KiiObject. KiiObject *object = [bucket createObject]; // Set key-value pairs. [object setObject:[NSNumber numberWithInt:987] forKey:@"score"]; [object setObject:@"easy" forKey:@"mode"]; [object setObject:[NSNumber numberWithBool:NO] forKey:@"premiumUser"]; // Save the KiiObject. [object saveSynchronous:&error]; if (error != nil) { // Handle the error. return; }
-
KiiBucket *bucket = [[KiiUser currentUser] bucketWithName:@"MyBucket"]; // Create a KiiObject. KiiObject *object = [bucket createObject]; // Set key-value pairs. [object setObject:[NSNumber numberWithInt:987] forKey:@"score"]; [object setObject:@"easy" forKey:@"mode"]; [object setObject:[NSNumber numberWithBool:NO] forKey:@"premiumUser"]; // Save the KiiObject. [object saveWithBlock:^(KiiObject *object, NSError *error) { if (error != nil) { // Handle the error. return; } }];
save(_:)
メソッドを呼ぶのを忘れないでください。save(_:)
メソッドを実行するまで、KiiObject にセットしたキーと値のペアは Kii Cloud に反映されません。
このコードを実行すると、Kii Cloud の指定された Bucket(この例ではユーザースコープの MyBucket
)に KiiObject が作成されます。
ここでは、save(_:)
メソッドの実行前に、setObject(_:forKey:)
メソッドで 3 つのフィールドに値を格納しています。値の格納方法は、キーと値のペアの設定 を参照してください。
ID を指定して KiiObject を作成
作成された KiiObject には自動的に ID が付与されますが、明示的に ID を指定して KiiObject を作成することもできます。
以下に、先ほどと同じ KiiObject を ID を指定して作成する例を挙げます。
Swift:
-
let objectID = "score_userX" let bucket = KiiUser.currentUser()!.bucketWithName("MyBucket") // Create a KiiObject with the specific ID. let object = bucket.createObject(withID: objectID) // Set key-value pairs. object.setObject(NSNumber(value: 987 as Int32), forKey: "score") object.setObject("easy", forKey: "mode") object.setObject(NSNumber(value: false as Bool), forKey: "premiumUser") do{ // Save the KiiObject. try object.saveAllFieldsSynchronous(true) } catch let error as NSError { // Handle the error. return }
-
let objectID = "score_userX" let bucket = KiiUser.currentUser()!.bucketWithName("MyBucket") // Create a KiiObject with the specific ID. let object = bucket.createObject(withID: objectID) // Set key-value pairs. object.setObject(NSNumber(value: 987 as Int32), forKey: "score") object.setObject("easy", forKey: "mode") object.setObject(NSNumber(value: false as Bool), forKey: "premiumUser") // Save the KiiObject. object.saveAllFields(true, with: { (object : KiiObject?, error : Error?) -> Void in if (error != nil) { // Handle the error. return } })
Objective-C:
-
NSError *error = nil; KiiObject *object = nil; NSString *objectID = @"score_userX"; KiiBucket *bucket = [[KiiUser currentUser] bucketWithName:@"MyBucket"]; @try { // Create a KiiObject with the specific ID. object = [bucket createObjectWithID:objectID]; } @catch (NSException *exp) { // The KiiObject ID is invalid. } // Set key-value pairs. [object setObject:[NSNumber numberWithInt:987] forKey:@"score"]; [object setObject:@"easy" forKey:@"mode"]; [object setObject:[NSNumber numberWithBool:NO] forKey:@"premiumUser"]; // Save the KiiObject. [object saveAllFieldsSynchronous:YES withError:&error]; if (error != nil) { // Handle the error. return; }
-
KiiObject *object = nil; NSString *objectID = @"score_userX"; KiiBucket *bucket = [[KiiUser currentUser] bucketWithName:@"MyBucket"]; @try { // Create a KiiObject with the specific ID. object = [bucket createObjectWithID:objectID]; } @catch (NSException *exp) { // The KiiObject ID is invalid. } // Set key-value pairs. [object setObject:[NSNumber numberWithInt:987] forKey:@"score"]; [object setObject:@"easy" forKey:@"mode"]; [object setObject:[NSNumber numberWithBool:NO] forKey:@"premiumUser"]; // Save the KiiObject. [object saveAllFields:YES withBlock:^(KiiObject *object, NSError *error) { if (error != nil) { // Handle the error. return; } }];
ID は createObject(WithID:)
メソッド実行時に指定します。この際、不正な ID が指定された場合はエラーとなります(使用可能な ID のパターンについては appledoc を参照してください)。
明示的に ID を指定した場合は、saveAllFields(_:with:_:)
メソッドを実行することにより Kii Cloud 上に KiiObject が新規作成されます。ID 指定の場合は save(_:)
メソッドによる新規作成はできません。
なお、上記の例において "scoreuserX" という ID を持つ KiiObject がサーバーにすでに存在していた場合は、この KiiObject が上書きされます(必要に応じて `saveAllFields(:with:_:)` メソッド実行時に false を指定すると、このような上書きを防ぐことが可能です。詳細については appledoc を参照してください)。
KiiObject アクセスのヒント
アプリケーションスコープに書き込めない:
アプリケーションスコープはすべてのユーザーや、ログイン前の匿名ユーザーの状態でも読み込めますが、書き込むにはユーザーのログインが必要です。もし、アプリでユーザーのログイン操作を省略したい場合は、匿名ユーザーのままアプリケーションスコープの ACL を変更するのではなく、仮ユーザー(Pseudo User)としてログインする設計をおすすめします。詳細は、仮ユーザー(Pseudo User) をご覧ください。
また、アプリケーションスコープの利用にはセキュリティの考慮も必要です。詳細は、セキュリティ をご覧ください。
書き込んだはずの KiiObject が参照できない:
Bucket のスコープが意図したとおりかどうか、ご確認ください。
書き込みと読み込みを異なるスコープで行うと、Bucket 名が同じであっても書き込んだ内容を取得できません。開発者ポータルのデータブラウザを使って読み込んだ場合でも、同様です。
たとえば、
Kii.bucket(withName:"myBucket")
でアプリケーションスコープに作成したデータは、Kii.currentUser().bucket(withName:"myBucket")
でユーザースコープから読み込もうとしても、結果が得られません。