1

入力された値の最大 20 レコードをキャッシュしています。ここにコードがあります

NSMutableArray *startingArray = [[defaults objectForKey:@"startingTextArray"] mutableCopy];

if (startingArray == nil)
startingArray = [[NSMutableArray alloc] initWithCapacity:0];

if (![startingArray containsObject:self.starting.text])
[startingArray addObject:self.starting.text];

[defaults setObject:startingArray forKey:@"startingTextArray"];

問題は、どうすれば20個の値だけを修正できるでしょうか? たとえば、20 個のスペースが埋められた場合、次のエントリ setObject が最初の場所に追加され、最初のエントリが削除されます。

4

2 に答える 2

0

20 番目のオブジェクトにいるかどうか、およびインデックス 0 でオブジェクトの置換を開始しているかどうかを確認する必要があります。

 NSMutableArray *startingArray = [[defaults objectForKey:@"startingTextArray"] mutableCopy];
    if (startingArray == nil)
        startingArray = [[NSMutableArray alloc] initWithCapacity:0];


if (![startingArray containsObject:self.starting.text] && (startingArray.count +1) <= 20)
     [startingArray addObject:self.starting.text];
else {
     [startingArray insertObject:obj atIndex:0];
     [startingArray removeObjectAtIndex:(startingArray.count - 1)];
}


[defaults setObject:startingArray forKey:@"startingTextArray"];
于 2013-03-28T15:28:34.937 に答える
0

カウンターとモジュロを使用する

例:

NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:20];
for (int i = 0; i < 42; i++)
    array[i % 20] = @(i);

プリント:

40, 41, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39

于 2013-03-28T15:36:19.300 に答える