我正在一个报价应用程序,我有我的plist设置和plist中的每个字符串作为自己的报价。有什么方法可以让我的View中的某个TextView显示一个引号,并在每天午夜进行更改,然后将该字符串标记为已用,以便它不会重复,并以随机顺序继续进行?从阵列显示字符串随机,只有一次,并改变每一天
回答
您可以更新您的plist以删除报价或设置一个标志作为使用,然后排除那些被选中。
至于何时标记一个使用。我不确定每天午夜是否适合你的模型如果它真的是随机的,那么将它们标记为午夜使用没有多大意义,因为它们可能无法每天打开应用程序,并会错过任意引号。就好像它被命令一样,每天都会有一个报价。
编辑从OP:
在AppDelegate中didFinishLaunch我添加以下代码:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (! [defaults boolForKey:@"notFirstRun"]) {
[defaults setBool:YES forKey:@"notFirstRun"];
[defaults setInteger:0 forKey:@"verseKey"];
[defaults synchronize];
}
NSTimeInterval date = [defaults doubleForKey:@"startTimeInterval"];
NSTimeInterval dateNow = [NSDate timeIntervalSinceReferenceDate];
NSTimeInterval difference = dateNow - date;
difference = difference/84000;
if(difference >= 0 && difference <= 1) {
}
if(difference >= 1) {
NSLog(@"ITSMORE");
NSInteger savedIndex = [[NSUserDefaults standardUserDefaults] integerForKey:@"verseKey"];
savedIndex +=1;
if (savedIndex == 200) {
[defaults setInteger:0 forKey:@"verseKey"];
dateNow = [NSDate timeIntervalSinceReferenceDate];
[defaults setDouble:dateNow forKey:@"startTimeInterval"];
[defaults synchronize];
}
else {
[defaults setInteger:savedIndex forKey:@"verseKey"];
dateNow = [NSDate timeIntervalSinceReferenceDate];
[defaults setDouble:dateNow forKey:@"startTimeInterval"];
[defaults synchronize];
}
}
我相信,此代码应在firstRun设置为0的值verseKey并将其与同步NSUserDefaults的。然后,每次启动时,它会查看是否超过24小时。如果有,那么它会将1加到verseKey的键上直到它达到200(我总共有200个引号)。一旦命中了200,它就会将它重置为0.然后,我将TextView设置为objectAtIndex:key以便它改变。听起来正确吗?
标记使用的引号的问题在于,如果您有大量的引号,随着您使用它们,随机索引将继续使用已用过的引号,您将不得不迭代。(在最坏的情况下,如果你有大量的报价,只剩下几个选择一些,你可能会等待相当长的一段时间才能登陆一个未使用的;-))。保留一组未使用的指数会更好。那么你总是可以在一次迭代中随机选择一个。如果你真的删除了引号,你仍然需要保留原来的列表,否则你会用完! – idz 2012-08-02 18:38:05
我现在只有200个引号,如果他们不打开每一天,你会提出一个关于缺少引号的好话。现在,每本书都有一个连续几行的报价,我宁愿他们是随机的,所以它没有一周看应用程序,只看到一种特定的报价风格。我可能尝试在加载到xcode之前随机化数组的顺序,然后按顺序进行,但我仍然不确定该怎么说,当应用程序打开时,显示0行,然后等待24小时和显示行1 ... – user717452 2012-08-02 18:46:50
如果你想要它从他们上次打开的应用程序非常容易24小时只需存储一个'NSDate'然后检查启动时使用'timeIntervalSinceDate:'然而,如果你想它是每天的事情,无论他们看什么时间,然后你需要做更复杂的检查。 – 2012-08-02 19:23:01
更新:我之前提到的答案NSMutableSet
想到NSMutableArray
可能是您更好的匹配您的要求。
保留未使用的字符串的索引数组(您将需要持久存储该数据,例如在NSUserDefaults
中)。你可以在循环中初始化它,并用你所有引号的索引来填充它。所以如果你有200个这个数组将有200个元素[0..199]。每天或适当的时候,从这个数组中选择一个随机索引,用它作为当天报价的索引。将其从阵列中移除并将修改过的阵列写回NSUserDefaults
。当数组有零个元素重新填充所有的索引。请查看NSUserDefaults
,NSMutableArray
和arc4random
。
例如,假设您有5个引号。
Day 1: unusedQuotes = [ 0, 1, 2, 3, 4 ]; randomly choose index 2. unusedQuotes[2] is 2 so show quote[2] and remove unusedQuotes[2] from array Day 2: unusedQuotes = [ 0, 1, 3, 4 ]; randomly choose index 3. unusedQuotes[3] is 4 so show quote[4] and remove unusedQuotes[4] from array Day 3: unusedQuotes = [ 0, 1, 3]; ... and so on
您还应该保存您选择报价的日期。当用户再次使用您的应用程序,如果它是相同的日期不要选择一个新的报价。如果日期不同,只能选择新的报价。这样,您就不会错过报价或在给定日期显示多个报价。
- 1. 在textview中显示随机字符串,每天一次,用于java和android studio
- 2. 每天,每周,每月只显示一次uialertview一次?
- 3. 显示DIV每天一次
- 4. Python只输出一次随机/选择一个字符串
- 5. Cakephp:每天随机记录一次
- 6. PHP:随机结果每天一次,
- 7. 随机显示字符串 -
- 8. 随机显示字符串
- 9. 显示随机字符串
- 10. 只显示字符串中的唯一字符一次
- 11. 每次/每天随机数
- 12. 基于阵列中随机字符串的显示图像
- 13. $。每次只显示一个系列highcharts
- 14. 显示模式 - 每天只显示一次
- 15. SQL monthbase,显示monthbase每天只有一次,左加入
- 16. 显示一年中的每一天的字符串
- 17. 每次生成一个随机字符串
- 18. 生成随机数 - 种子的改变只有一次
- 19. 如何只返回一次随机字符串?
- 20. 随机字符串选择器只能在每页加载时执行一次
- 21. 显示一组随机字符
- 22. 在其他阵列上随机显示一个阵列
- 23. 的Javascript得到随机变量从数组,但每个只有一次
- 24. 从具有一定概率的字符串列表生成随机字符串
- 25. 每天显示的随机图像
- 26. 仅从阵列显示一次
- 27. 获取字符串中的每个字母只有一次
- 28. 每次显示一列
- 29. 每天更改字符串
- 30. 如何每隔15天显示一次?
为什么不按顺序显示它们?因为你只会显示每个字符串一次它们在plist中出现的顺序与任何其他顺序一样随机! – idz 2012-08-02 18:23:41
这里有一个不同的@idz,如果它在运行时随机,那么具有不同手机的两个用户将在同一天看到不同的引号。但是,如果它的订购,甚至是随机的,每个用户每天都会看到相同的报价。或者至少按照相同的顺序进行,如果这样做的话,他们必须在报价被使用之前真正查看报价。 – 2012-08-02 18:25:50
@RyanPoolos是的,只要他们都在同一天开始使用应用程序。只是提出一点,一旦你添加一个条件(如不重复)并不像你想象的那样随意!除了评论之外,我也解释了为OP提供一个答案,告诉他们如何去做他们想做的事情! – idz 2012-08-02 18:31:41