2009-11-10 7 views
13

Wie ich verstehe, können Sie in Objective-C nur Objekte in Wörterbücher einfügen. Wenn ich also ein Wörterbuch erstellen würde, müsste es alle Objekte haben. Das bedeutet, dass ich meine NSNummer eingeben muss, oder?Speichern von Ints in einem Dictionary

Soo ...

NSNumber *testNum = [NSNumber numberWithInt:varMoney]; 


NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; 
[dictionary setObject:@"OMG, Object 1!!!!" forKey:@"1"]; 
[dictionary setObject:@"Number two!" forKey:@"2"]; 
[dictionary setObject:testNum forKey:@"3"]; 


NSNumber *retrieved = [dictionary objectForKey:@"3"]; 
int newVarMoney = [retrieved intValue]; 

Wo varMoney ein int ist, die zuvor erklärt wurde. Meine Frage ist, gibt es eine bessere Möglichkeit, "Int" in einem Wörterbuch zu speichern, als es in eine NSNumber zu setzen?

Danke!

Edit: 04/25/13

Es ist eine lange Zeit her, seit ich diese Frage gestellt. Für Leute, die in der Zukunft stolpern, gibt es einfachere Möglichkeiten, dies mit dem Apple LLVM Compiler 4.0 zu tun, der in Xcode für ein bisschen voreingestellt war. (ARC)

NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; 
[dictionary setObject:@1337 forKey:@"1"]; 

Das ist es, verwenden Sie die @ 1337 Syntax, um schnell NSNumber Objekte zu erstellen. Arbeitet mit Variablen, so dass meine oben könnte geworden:

[dictionary setObject:@(varMoney) forKey:@"3"]; 

oder

dictionary[@"mykey"] = @1337; 

Einfachere.

+2

Sie können auch Wörterbuch tun [@ "1"] = @ 1337; – JuJoDi

Antwort

18

Sie sind richtig, NSNumber ist der normale Weg, um diese Situation zu behandeln. Sie können auch NSValue oder NSDecimalNumber verwenden.

+1

Das ist okay, ich habe nicht gedacht, dass es da war, also weiß ich es jetzt. Danke! –

0

Sorry, aber nicht :(Nicht so weit ich weiß. Grund dafür ist, dass ganze Zahlen keine Objekte sind, und NSDictionary nur speichert Objekte.

+0

Das ist in Ordnung, ich habe nicht gedacht, dass es war, also weiß ich es jetzt. Vielen Dank! –

5

Wenn Sie bereit sind, Sie Core Foundation (CFDictionaries) zu verwenden zurückfallen definitiv Wörterbücher gemacht, in die ich willkürlich void * Werte können wie alles, was Sie speichern. ich habe setzen.

Sie benötigen ein wenig mehr Sanitär zu tun, aber nicht viel, und es ist alles dokumentiert.