我有一个NSArray
包含多个NSDictionary
. 我正在做的是破坏NSDictionary
并将其添加到CoreData
,但结果是每个变量(id, alarmDistance, isAlert
等)都将自身添加到单独的行中。我想要做的是插入一堆 od 对象,它们NSDictionary
保持在同一行中。
我的代码:
- (void)updateTrapsTable
{
NSArray *node = @[@"alarmDistance", @"id", @"isActive", @"lat", @"lon", @"poly0", @"poly1", @"poly2", @"polygonAzimut1", @"polygonAzimut2", @"polygonAzimut3", @"polys", @"roadNumber", @"trapDescription", @"type", @"degrees", @"direction"];
NSArray *arrayOfTraps = [[NSUserDefaults standardUserDefaults] objectForKey:@"arrayOfAllTraps"];
for (int i=0; i < arrayOfTraps.count; i++) // Enumerate all traps
{
NSMutableDictionary *singleTrap = [[NSMutableDictionary alloc] init];
singleTrap = arrayOfTraps[i];
for (int c=0; c < node.count; c++) // Enumerate all traps' attributes
{
[self addToCoreData_value:singleTrap[node[c]] key:node[c]];
}
NSLog(@"TRAP #%d ADDED TO CORE DATA!", i);
}
}
- (void)addToCoreData_value:(NSString*)value key:(NSString*)key
{
NSLog(@"Trying to add record to Core Data");
self.entity = [NSEntityDescription entityForName:@"Trap" inManagedObjectContext:self.managedObjectContext];
self.managedObject = [[NSManagedObject alloc] initWithEntity:self.entity insertIntoManagedObjectContext:self.managedObjectContext];
if ([key isEqualToString:@"id"])
{
[self.managedObject setValue:@([value integerValue]) forKey:@"trapID"];
}
else if ([key isEqualToString:@"alarmDistance"] ||
[key isEqualToString:@"degrees"] ||
[key isEqualToString:@"polys"] ||
[key isEqualToString:@"roadNumber"] ||
[key isEqualToString:@"type"])
{
[self.managedObject setValue:@([value integerValue]) forKey:key];
}
else if ([key isEqualToString:@"lat"] ||
[key isEqualToString:@"lon"])
{
[self.managedObject setValue:@([value floatValue]) forKey:key];
}
else if ([key isEqualToString:@"isActive"])
{
BOOL toSet = false;
if ([value isEqualToString:@"True"])
{
toSet = YES;
}
else
{
toSet = NO;
}
[self.managedObject setValue:@(toSet) forKey:key];
}
else
{
[self.managedObject setValue:value forKey:key];
}
NSError *error;
[self.managedObjectContext save:&error];
NSLog(@"Record added to Core Data");
}