web-dev-qa-db-ja.com

型intのコレクション要素の受信はiOSのObjective Cオブジェクトではありません

次の辞書があります。

NSDictionary* jsonDict = @{
                               @"firstName": txtFirstName.text,
                               @"lastName": txtLastName.text,
                               @"email": txtEmailAddress.text,
                               @"password": txtPassword.text,
                               @"imageUrl": imageUrl,
                               @"facebookId": [fbId integerValue],
                              };

最後の要素では、整数を使用する必要がありますが、エラーが発生します。

collection element of type int is not an Objective C object

この要素でint値を使用するにはどうすればよいですか?

17
Atma

でなければなりません:

@"facebookId": [NSNumber numberWithInt:[fbId intValue]];

NSDictionaryはオブジェクトでのみ機能するため、intsまたはintegersまたはboolsまたはその他primitiveデータ型。

[fbId integerValue]はプリミティブ整数値を返します(これはオブジェクトではありません
したがって、primitiveデータ型をカプセル化してオブジェクトにする必要があります。このため、NSNumberのようなクラスを使用して、このがらくたを格納するだけのオブジェクトを作成する必要があります。

もっと読む: http://rypress.com/tutorials/objective-c/data-types/nsnumber.html

60
staticVoidMan

または、fbIDをNSStringとすると、

@"facebookId": @([fbId intValue]);

javaのオートボクシングのようなものです。 @プリミティブ番号をNSNumberオブジェクトに変換します。

6
karim

fbIDintであるとすると、次のようになります。

@"facebookId": @(fbId)
5
Himanshu padia

NSDictionaryはオブジェクト(例:NSString、NSNumber、NSArrayなど)のみを保持でき、プリミティブ値(例:int、float、doubleなど)は保持できません。 Objective-Cのほとんどすべてのカプセル化についても同じことが言えます。数値を保存するには、NSNumberを使用します。

NSDictionary *dictionary = @{@"key" : [NSNumber numberWithInt:integerValue]]};
1
Chris

ディクショナリの非ポインターデータ型値ストアには@(%value%)を使用する必要があります。

@"facebookId": @(fbId)
0
Pratik Sodha