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

标签 iphone objective-c sqlite xcode4

我正在帮助我的 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/

相关文章:

iphone - iPhone/Android 浏览器是否支持 CSS @media 手持设备?

objective-c - NSString 内存管理问题 : message sent to deallocated instance

python - 为什么这个 Sqlite 日期比较有效?

android - fillWindow() 中的无效语句

ios - 如何修复 Alamofire 库错误?

iphone - 通过 App Store 分发 iPad 内部应用程序

ios - iPhone 上的准确时间

ios - 我如何创建两个 UIView 并使用滑动手势将一个覆盖在另一个上?

sqlite - 将 JRuby-On-Rails 应用程序部署为 war 时,将 sqlite3 数据库放在哪里?

iPhone应用程序: emoji unicode