Как получить доступ к NSDictionary по номеру ключа?

Я новичок в разработке iPhone, и мне нужна помощь.

Я создал NSDictionary для хранения некоторых цитат, за которыми следуют ключи (это тот, кто их цитировал).

Теперь я создал метод, чтобы вытащить случайную цитату, и использовать этот метод «arc4random_uniform» Мне нужно использовать целое число … и их я возвращаю [self.insperationalQuotes objectForKey: «здесь я хочу случайное число», ];

Обычно, вероятно, было бы проще использовать массив, но я хочу использовать ключ, чтобы прикрепить его к определенной фотографии человека, который его цитировал … или вы по-прежнему рекомендуете делать это с помощью массива и сказать, что объект на # 1 будет эйнштейном например…

Это мой код:

#import "NOQuotes.h" @implementation NOQuotes - (NSDictionary *) insparationalQuotes { if (_insparationalQuotes == nil) { _insparationalQuotes = [[NSDictionary alloc] initWithObjectsAndKeys: @"Try not to become a man of success but a man of value.", @"ALBERT EINSTEIN", @"What lies behind us and what lies before us are tiny matters compared to what lies within us.", @"HENRY STANLEY HASKINS", @"It is never too late to be what you might have been.", @"GEORGE ELIOT", @"All our dreams can come true–if we have the courage to pursue them.", @"WALT DISNEY", @"The best way to predict the future is to invent it.", @"ALAN KAY", @"You miss 100% of the shots you don't take.", @"WAYNE GRETZKY", @"If opportunity doesn't knock, build a door.", @"MILTON BERLE", @"Failure is the condiment that gives success its flavor.", @"TRUMAN CAPOTE", nil]; } return _insparationalQuotes; } - (NSString *) getRandomQuote { int randomNum = arc4random_uniform(self.insparationalQuotes.count); return [self.insparationalQuotes objectForKey:randomNum]; //error } 

Благодаря!

Используйте allValues для вытягивания массива значений и индексации в этот массив с использованием случайного числа, например:

 - (NSString *) getRandomQuote { int randomNum = arc4random_uniform(self.insparationalQuotes.count); return [[self.insparationalQuotes allValues] objectAtIndex:randomNum]; } 

Для того, что вы пытаетесь сделать, я рекомендую создать класс Quote , в котором будут храниться цитата, «автор» и изображение, связанное с этим человеком. Затем я заполнил NSArray или NSMutableArray экземплярами этих объектов Quote чтобы вы могли случайно выбрать индекс.

 @interface Quote : NSObject @property NSString *quote; @property NSString *author; @property UIImage *picture; +(instancetype)quoteWithQuote:(NSString*)quote author:(NSString*)author picture:(UIImage*)picture; -(instancetype)initWithQuote:(NSString*)quote author:(NSString*)author picture:(UIImage*)picture; @end 

Затем просто заполните этот класс. Возможно, вы даже захотите, чтобы @property s был только для readonly , что делает класс Quote неизменным.


Кроме того, вы можете сохранить NSDictionary как есть и NSArray его с NSArray состоящим из всех имен авторов (которые вы используете как ключи). Затем выберите случайный индекс из массива имен и используйте это имя в качестве ключа в словаре для цитаты. Проблема здесь в том, что она немного избыточна, и вы не можете иметь несколько котировок с одним и тем же автором.

Я согласен с тем, что вы действительно хотите создать массив пользовательских объектов, но я хотел бы указать, что можно выбрать случайную запись из объекта NSDictionary :

 - (id)randomObjectInDictionary:(NSDictionary *)dict { NSArray *keyArray = [dict allKeys]; int rand = arc4random_uniform([keyArray count]); return dict[keyArray[rand]]; } 
Давайте будем гением компьютера.