我正在一個報價應用程序,我有我的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