それは私を夢中にさせています。ログを作成したところ、オブジェクトが異なっていることがわかりましたが、から戻ったときNSUserDefaults
、すべてのオブジェクトが同じです。私のコード:
- (void)breakTrapsToSave:(NSDictionary*)trapsDict firstTimeUpdate:(Boolean)firstTimeUpdate
{
// If traps already save
// we will get them from NSUserDefaults
// and then update them
if (!firstTimeUpdate)
{
allTraps = [self.sharedPrefs objectForKey:@"arrayOfAllTraps"];
}
// JSON Parsing
tempA = trapsDict[@"Envelope"];
tempB = tempA[@"Body"];
tempC = tempB[@"getTrapsResponse"];
tempD = tempC[@"getTrapsResult"];
tempE = tempD[@"TRAPS"];
self.lastUpdate = tempE[@"lastUpdate"];
[[NSUserDefaults standardUserDefaults] setObject:self.lastUpdate forKey:@"last_update"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"Traps latest updated at: %@", self.lastUpdate);
tempF = tempE[@"TRAP"];
if (tempF.count <= 0)
{
newTrapsUpdates = false;
NSLog(@"NO NEW TRAPS!");
}
else
{
newTrapsUpdates = true;
NSLog(@"NEW TRAPS FOUND");
[tempF enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
tempA = tempF[idx];
NSString *finalResult;
NSString *key;
NSMutableDictionary *singleTrap = [[NSMutableDictionary alloc] init];
for (int i=0; i < node.count; i++)
{
finalResult = tempA[node[i]];
key = node[i];
if ([finalResult length] <= 0)
{
finalResult = @"0";
}
singleTrap[key] = finalResult;
}
if (allTraps.count <= 0)
{
allTraps = [[NSMutableArray alloc] initWithObjects:singleTrap, nil];
}
else
{
[allTraps addObject:singleTrap];
}
counter = idx;
}];
allTraps = [[IDANNetroads sharedInstance] removeDuplicatedFromArray:allTraps];
// Save all traps
[[NSUserDefaults standardUserDefaults] setObject:allTraps forKey:@"arrayOfAllTraps"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"Total Traps: %d", allTraps.count);
NSLog(@"Total New Traps: %d", counter);
}
}
ログを作成したところ、本来allTraps[idx] = singleTrap;
あるべき姿とは異なることがわかりますが、ログを印刷すると、NSLog(@"allTraps: %@", allTraps);
すべてのオブジェクトが最後のオブジェクトであることがわかります。
編集:
最終的に、singleTrap の割り当てを置き換えて、列挙ブロック内に配置しました。
NSMutableDictionary *singleTrap = [[NSMutableDictionary alloc] init];
そして、私はこのコードを追加しました:
if (allTraps.count <= 0)
{
allTraps = [[NSMutableArray alloc] initWithObjects:singleTrap, nil];
}
else
{
[allTraps addObject:singleTrap];
}
したがって、最終的なコードは編集されます。