我正在帮助我的 friend 开发一个针对特定研究领域的 iPhone 随机事实应用程序。
我的问题是说出 100 个左右的事实并随机生成它们的最佳方式是什么。我现在有一个工作原型(prototype),但它只是使用 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"];
关于iphone - 创建一个随机事实应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6781258/