创建一个随机事实应用程序



我正在帮助我的朋友开发一个iPhone随机事实应用程序,它将特定于某些研究领域。

我的问题是什么是最好的方法,说100个左右的事实,并随机生成它们。我现在有一个工作原型,但它只是使用NSMutableArray和if循环来循环事实。

随机化它们的最佳方法是什么,以便每次启动应用程序时都出现不同的序列?我应该使用SQLite数据库吗?

您可以对数组进行洗牌,保存其状态和在数组中的位置。这样每次你打开应用时,它都会是一个新的事实,当所有事实都被看到时,你可以洗牌,这样你就必须在看到任何事实第二次之前至少看到一次。

然后您可以将事实保存在多个文件中,命名为您想要的区域。也许,你有一个科学文件,一个历史文件,等等。那么事实将只显示特定于该类别的事实。

我不同意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"];

把你的字符串放在SQLite中,是的。

那么你想要的查询是:

SELECT * FROM table ORDER BY RANDOM() LIMIT 1;

最新更新