2010-06-22 4 views
1

Я хочу прочитать список имен и псевдонимов из созданного мной plist, а затем случайным образом выбрать имя и фамилию для класса Person.Создание случайных имен из plist

Плис имеет эту структуру;

Root (Dictionary) 
-> Names (Dictionary) 
--> Forenames (Array) 
---> Item 0 (String) "Bob" 
---> Item 1 (String) "Alan" 
---> Item 2 (String) "John" 
--> Surnames (Array) 
---> Item 0 (String) "White" 
---> Item 1 (String) "Smith" 
---> Item 2 (String) "Black" 

Я был в состоянии вывести все ключи для словаря, но я не уверен в том, как захватить «» или отчество «Фамилия» ключ, а затем хранить это в массиве.

Код для вывода всех ключей - это простой вывод в журнал.

ie;

// Make a mutable (can add to it) dictionary 
NSMutableDictionary *dictionary; 


// Read foo.plist 
NSString *path  = [[NSBundle mainBundle] bundlePath]; 
NSString *finalPath = [path stringByAppendingPathComponent:@"foo.plist"]; 

dictionary = [NSDictionary dictionaryWithContentsOfFile:finalPath]; 

// dump the contents of the dictionary to the console 
for (id key in dictionary) 
{ 
    NSLog(@"Bundle key=%@, value=%@", key, [dictionary objectForKey:key]);  
} 

NSMutableArray *forenames; 

// This doesn't work, it outputs an empty array 
forenames = [dictionary objectForKey:@"Forenames"]; 
NSLog(@"Forenames:%@", forenames); 

вопросы;

  1. Как сделать, чтобы мои имена NSMutableArray * принимали содержимое словаря «Forenames»?

  2. Как только я сохранил и имя и фамилию в своих собственных NSMutableArrays, мне нужно случайным образом выбрать имя и фамилию; Каков наилучший способ сделать это?

Идея состоит в том, что я могу создать файл Person.m с переменными класса Forename/Surname, и я могу создавать случайно сгенерированные люди.

Спасибо.

+0

Я думаю, это подразумевалось, но дамп содержимого словаря выглядит так, как ожидалось? Является ли весь этот код частью того же метода? Кроме того, стоит отметить, что массивы, хранящиеся во вновь создаваемом словаре, неизменяемы, поэтому вам нужно называть 'mutableCopy', если вы хотите их модифицировать. – Endemic

ответ

3

Основываясь на структуре вашего списка свойств, я думаю, что вам нужно сделать еще один уровень разыменования:

NSDictionary *names = [dictionary objectForKey:@"Names"]; 
NSMutableArray *forenames = [[names objectForKey:@"Forenames"] mutableCopy]; 
NSMutableArray *surnames = [[names objectForKey:@"Surnames"] mutableCopy]; 

Затем вы можете использовать srandom и random для генерации случайных индексов в массивах. Общий способ генерации случайного числа на отрезке [0, N) заключается в следующем:

NSUInteger i = (NSUInteger)((random()/(double)RAND_MAX)*N);

Заменить N выше, с вызовом массив-х count, и вы будете устанавливать.

Кстати, я не вижу причины для создания изменчивой копии массивов имен. Я просто хотел проиллюстрировать, как вы это сделаете. Кроме того, вам нужно посеять srandom(time(NULL));, чтобы получать разные случайные значения каждый раз, когда запускается ваша программа.

+0

Я попробую. Я не знал, что мне нужно использовать mutableCopy, но я попробую и посмотрю, что произойдет. Благодарю. – zardon

+0

Это сработало отлично, я смог рандомизировать первое имя и фамилию и снести их в журнал. Спасибо за помощь. Я думаю, что mutableCopy меня бросил. – zardon

Смежные вопросы