3

実行時に値を追加しNSUserDefaults、次のようにキーを作成しています[NSString stringWithFormat:@"decrement%@",course_id];

オブジェクトを1つずつ設定しています。キーが「デクリメント」で始まるすべてのuserdefaultsオブジェクトを取得する方法はありますか?

または、ループに入って、正確なキーを1つずつ作成してオブジェクトを取得する必要がありますか?

注:-私は批判の健全な方法として反対票を受け入れますが、私が改善できるように理由を書きます。

4

4 に答える 4

4

NSUserDefaultsのすべての辞書キーは次のように取得できます。

 NSArray *arrKeys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]

次に、NSPredicateを使用して[NSString stringWithFormat:@ "decrement%@"、course_id]を検索します。arrKeysの値

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SELF like %@)",@"decrement"];
NSArray *keysLikeDecrement =
[arrKeys filteredArrayUsingPredicate:predicate];

NSPredicate *aPredicate =
[NSPredicate predicateWithFormat:@"SELF beginswith 'decrement'"];
NSArray *beginWithDecrement =
[arrKeys filteredArrayUsingPredicate:aPredicate];

NSPredicate *bPredicate =
[NSPredicate predicateWithFormat:@"SELF contains 'decrement'"];
NSArray *containsWithDecrement =[arrKeys filterUsingPredicate:bPredicate];
于 2012-09-12T11:16:52.773 に答える
2

NSArray *keys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys];

その後、 s メソッドkeysを使用してフィルタリングできます。NSArray

ただし、Coredata などの別の永続化メカニズムを使用する必要があるようです。

于 2012-09-12T11:14:30.533 に答える
2

最良の/最速のソリューションではありませんが、利用可能な組み込みブロックを使用すると、次の方法ですべてのエントリを列挙できます。

NSArray *keys = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys];
[[keys objectsAtIndexes:[keys indexesOfObjectsPassingTest:^BOOL(NSString *key, NSUInteger idx, BOOL *stop) {
    return [obj hasPrefix:@"myPrefix"];
}]] enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop) {
    [[NSUserDefaults standardUserDefaults] objectForKey:key];
}];
于 2012-09-12T11:20:15.030 に答える
-1

答えは「いいえ」です。これを行う方法はありません。ユーザーの既定値は、キーと値のペアを持つ辞書に非常によく似ています。つまり、1000 個の数値の配列を作成し、その配列をデフォルトから取得して、900 の値を求めることができます。

于 2012-09-12T11:15:44.707 に答える