2013-12-07 3 views
10

Ich habe folgendes Wörterbuch:Empfangssammelelement int vom Typ ist kein Ziel c Objekt in iOS

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

Im letzten Elemente, ich brauche eine ganze Zahl zu verwenden, aber ich erhalte die Fehlermeldung:

collection element of type int is not an objective c object 

Wie kann ich einen int-Wert in diesem Element verwenden?

+0

'@“ facebookId ": [fbId integerValue]' sollte "@" facebookId ": @ ([fbId longLongValue])' sein. In Swift gibt es jedoch keine Cast-Anforderung für Zahlen: zB 'let jsonDict = [...," facebookId ": fbId.longLongValue()]' –

Antwort

45

sollte sein:

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

NSDictionary Arbeiten mit Objekten nur, und als Ergebnis können wir nicht speichern einfach int s oder integer s oder bool s oder anyother primitive Datentypen.

[fbId integerValue] gibt einen primitiven Integer-Wert (, die kein Objekt ist)
Daher brauchen wir primitive Datentypen zu kapseln und sie in Objekte. Aus diesem Grund müssen wir eine Klasse wie NSNumber verwenden, um ein Objekt zu erstellen, das diesen Mist einfach speichert.

mehr Lesung: http://rypress.com/tutorials/objective-c/data-types/nsnumber.html

5

OR, FBID unter der Annahme ist eine NSString,

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

wie seine Autoboxing in Java. @ konvertiert jede Primitivnummer in das NSNumber-Objekt.

+2

Und wenn 'fbId' bereits eine' NSNummer' ist, sollte es 'sein @ "facebookId": fbId, 'Es ist unklar, ob es sich um einen' NSString' oder 'NSNumber' handelt, da beide die' integerValue' Methode haben. – rmaddy

0

NSDictionary kann nur Objekte enthalten (z. B. NSString, NSNumber, NSArray usw.), nicht primitive Werte (z. B. int, float, double usw.). Dasselbe gilt für fast alle Einkapselungen in Objective-C. Zum Speichern von Nummern verwenden NSNumber:

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

Ich landete mit einem NSNumber:

NSNumberFormatter * f = [[NSNumberFormatter alloc] init]; 
    [f setNumberStyle:NSNumberFormatterDecimalStyle]; 
    NSNumber * myNumber = [f numberFromString:fbId]; 
    [f release]; 
+0

Warum mussten Sie solch eine komplizierte Methode verwenden, um eine BigInt wie eine Facebook ID zu parsen? Es ist nur eine 64-Bit-Integer/20-Zeichen-Zeichenfolge. Sie können einfach 'fbId longLongValue]' verwenden, um die Zeichenfolge in eine primitive Zahl zu analysieren und dann '@ ([fbId longLongValue])', um sie als 'NSNummer' zu interpretieren –

4

vorausgesetzt FBID ist ein int dann sollte es sein wie:

@"facebookId": @(fbId) 
Verwandte Themen