我有NSArray
,其中包含多个NSDictionary
。
我正在做的是打破NSDictionary
并将其添加到CoreData
,但结果是每个变量(id, alarmDistance, isAlert
等)都将自己添加到单独的行中。
我要做的是插入NSDictionary
保持在同一行的一堆od对象。
我的代码:
- (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");
}
答案 0 :(得分:2)
您的addToCoreData_value:
方法会创建一个新的“陷阱”对象,并为每个属性调用。
您必须首先更改逻辑以创建“陷阱”对象,然后将所有属性添加到此对象。