0

我有一个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");
}
4

1 回答 1

2

您的addToCoreData_value:方法会创建一个新的“Trap”对象并为每个属性调用。

您必须先更改逻辑以创建“陷阱”对象,然后将所有属性添加到该对象。

于 2013-07-04T07:51:18.953 回答