Создание случайного приложения фактов - PullRequest
3 голосов
/ 21 июля 2011

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

Мой вопрос заключается в том, как лучше всего сказать 100 или около того фактов и случайным образом генерироватьих.У меня есть рабочий прототип на данный момент, но он просто перебирает факты, используя NSMutableArray и цикл if.

Каков наилучший способ их рандомизации, чтобы каждый раз, когда приложение запускалось по-другомупоследовательность появляется?Должен ли я использовать базу данных SQLite?

Ответы [ 2 ]

4 голосов
/ 21 июля 2011

Вы можете перетасовать массив, сохранить его состояние и позицию в массиве.Таким образом, каждый раз, когда вы открываете приложение, это будет новый факт, и вы можете перетасовать, когда все факты были замечены, так что вы должны увидеть каждый факт хотя бы один раз, прежде чем вы увидите какой-либо факт во второй раз.

Затем вы можете сохранить факты в нескольких файлах, назвав область, которую вы хотите.Поэтому, возможно, у вас есть научный файл, файл истории и т. Д. Тогда факты будут отображать только факты, относящиеся к категории.

Я не согласен с реализацией БД SQLite, потому что она требует значительного обслуживания, если только высохраните файл на сервере и получите информацию о БД с некоторыми функциями обновления.

Чтобы перемешать массив, добавьте категорию в свой класс для NSMutableArray в файле заголовка

@interface NSMutableArray (Shuffle)
-(void)shuffle;
@end

В файле реализации добавьте категорию и код:

@implementation NSMutableArray (Shuffle)
-(void)shuffle {

   for(int pivot = 0; pivot < [self count]; pivot++) {
       int index = arc4random() % [self count];

       [self exchangeObjectAtIndex:pivot withObjectAtIndex:index];
   }
}
@end

Чтобы сохранить массив и его местоположение:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:arrayOfFacts forKey:@"Array"] //arrayOfFacts is the array that has the facts in it
[defaults setInteger:arrayPosition forKey:@"Array Position"]; //arrayPosition is the fact number you are on

Затем, в вашем viewDidLoad или где бы вы ни находилисьзагрузка ваших объектов, загрузка из NSUserDefaults:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
arrayPosition = [defaults integerForKey:@"Array Position"];
arrayOfFacts = [defaults stringArrayForKey:@"Array"];
1 голос
/ 21 июля 2011

Поместите ваши строки в SQLite, да.

Тогда вам нужен следующий запрос:

SELECT * FROM table ORDER BY RANDOM() LIMIT 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...