0

私は引用アプリに取り組んでおり、plist のセットアップがあり、plist の各文字列は独自の引用として立っています。ビューの1つでTextViewに引用符を表示させ、毎日真夜中に変更し、文字列を使用済みとしてマークして、繰り返さないようにし、ランダムな順序で処理を続ける方法は何ですか? ?

4

2 に答える 2

1

更新:私の以前の回答は、おそらくあなたの要件により適しているとNSMutableSet考えています。NSMutableArray

未使用の文字列のインデックスの配列を保持します (たとえば、これを永続的に保存する必要がありますNSUserDefaults)。これをループで初期化して、すべての引用符のインデックスを入力するだけです。したがって、200 の場合、この配列には 200 の要素 [0..199] が含まれます。毎日、または適切なときに、この配列からランダムなインデックスを選択し、これをその日の引用のインデックスとして使用します。配列から削除し、変更された配列を に書き戻しますNSUserDefaults。配列の要素がゼロの場合、すべてのインデックスが再設定されます。NSUserDefaultsNSMutableArrayおよび をチェックアウトしarc4randomます。

たとえば、引用符が 5 つあったとします。

1日目:
  未使用の引用符 = [ 0, 1, 2, 3, 4 ];
  インデックス 2 をランダムに選択します。
  unusedQuotes[2] は 2 なので、quote[2] を表示し、unusedQuotes[2] を配列から削除します

2日目:
  未使用の引用符 = [ 0, 1, 3, 4 ];
  インデックス 3 をランダムに選択します。
  unusedQuotes[3] は 4 であるため、quote[4] を表示し、unusedQuotes[4] を配列から削除します

3日目:
  未使用の引用符 = [ 0, 1, 3];
  ...
  等々

また、見積もりを選択した日付も保存する必要があります。ユーザーがアプリを再度使用するとき、それが同じ日付である場合、新しい見積もりを選択しないでください。日が異なる場合にのみ、新しい見積もりを選択してください。このようにして、引用を見逃すことも、特定の日に複数の引用を表示することもありません。

于 2012-08-02T18:27:49.200 に答える
1

plist を更新して、引用符を削除するか、フラグを使用済みとして設定し、それらを選択から除外することができます。

いつ使用済みとしてマークするかについて。毎日真夜中にモデルが機能するかどうかはわかりません本当にランダムな場合、真夜中に使用されているとマークしてもあまり意味がありません。それが注文されたかのように、1日に見積もりがあります。

EDIT FROM 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 で verseKey の値を 0 に設定し、NSUserDefaults と同期する必要があると思います。その後、起動するたびに、24 時間以上経過したかどうかが確認されます。ある場合は、200 に達するまで verseKey のキーに 1 を追加します (合計 200 の引用符があります)。200 に達すると、それは 0 にリセットされます。次に、TextView を、詩の objectAtIndex:key に設定して、変更されるようにします。そうですね?

于 2012-08-02T18:28:44.863 に答える