Создать NSDictionary NSDictionaries - PullRequest
1 голос
/ 18 июля 2011

Верьте или нет, я искал в Интернете, прежде чем задать этот вопрос. Невероятно, но я еще не нашел хороший ясный пример того, как создать NSDictionary из NSDictionaries .

Вот мой код, но он печатает ноль. Есть идеи?

// Here I am creating the dictionaries in the code until I start getting them from the server ;)
NSArray *keys = [NSArray arrayWithObjects:@"mission", @"target", @"distance",@"status", nil];


NSArray *objectsA = [NSArray arrayWithObjects:@"tiger", @"bill", @"5.4km", @"unknown", nil];
NSDictionary *tiger = [NSDictionary dictionaryWithObjects:objectsA 
                                                  forKeys:keys];

NSArray *objectsB = [NSArray arrayWithObjects:@"bull", @"roger", @"10.1km", @"you are dead",  nil];
NSDictionary *bull = [NSDictionary dictionaryWithObjects:objectsB 
                                                 forKeys:keys];

NSArray *objectsC = [NSArray arrayWithObjects:@"peacock", @"geoff", @"1.4km", @"target liquidated", nil];
NSDictionary *peacock = [NSDictionary dictionaryWithObjects:objectsC 
                                                    forKeys:keys];

// activeMissions = [NSArray arrayWithObjects:tiger, bull, peacock, nil];


[activeMissions setObject:tiger forKey:@"tiger"];
[activeMissions setObject:bull forKey:@"bull"];
[activeMissions setObject:peacock forKey:@"peacock"];

NSLog(@"active Missions %@", activeMissions);

1 Ответ

8 голосов
/ 18 июля 2011

Вы не инициализируете activeMissions, поэтому оператор NSLog печатает ноль (отправка сообщения объекту nil в ObjC возвращает nil).

Поставьте это перед присвоением activeMissions:

NSMutableDictionary *activeMissions = [NSMutableDictionary dictionaryWithCapacity:3];

В противном случае, если вы предпочитаете иметь неизменяемый NSDictionary, вы можете сделать:

NSDictionary *activeMissions = [NSDictionary dictionaryWithObjects: [NSArray arrayWithObjects:tiger, bull, peacock, nil]
                                                  forKeys: [NSArray arrayWithObjects:@tiger, @"bull", @"peacock", nil]];

(Имейте в виду, что это автоматически выпущено, вам придется как-то сохранить).

...