【问题标题】:Creating a random fact app创建一个随机事实应用程序
【发布时间】:2011-10-10 12:13:44
【问题描述】:

我正在帮助我的朋友为 iPhone 开发一个随机事实应用程序,该应用程序将专门针对某些研究领域。

我的问题是说出 100 个左右的事实并随机生成它们的最佳方式是什么。我目前有一个工作原型,但它只是使用 NSMutableArray 和 if 循环循环遍历事实。

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

【问题讨论】:

    标签: iphone objective-c sqlite xcode4


    【解决方案1】:

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

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

    我不同意 SQLite DB 实现,因为它需要大量维护,除非您将文件保存在服务器上并使用某种刷新功能获取 db 信息。

    要打乱数组,请在头文件中为 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 好点子“在第二次看到任何事实之前,至少先看到每个事实一次”
    • 我将如何进行洗牌然后保存状态和位置?我对 Objective C 很陌生,所以如果这个问题有一个非常明显的答案,我很抱歉。
    • 抱歉回复晚了,那是周末:P。我在答案中添加了代码,为您指明正确的方向。如果有什么对你没有意义的,就问吧。
    【解决方案2】:

    将你的字符串放入 SQLite,是的。

    那么你想要的查询是:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-31
      • 2018-11-19
      • 1970-01-01
      • 2015-02-07
      • 2012-11-14
      • 2018-08-31
      • 1970-01-01
      • 2020-10-21
      相关资源
      最近更新 更多