【问题标题】:Insert multuple NSDictionary to CoreData problems将多个 Dictionary 插入 CoreData 问题
【发布时间】:2013-07-04 07:41:47
【问题描述】:

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

【问题讨论】:

    标签: ios objective-c core-data nsarray nsdictionary


    【解决方案1】:

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

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

    【讨论】:

    • 我尝试添加 '[self.managedObjectContext save:&error];'在 'NSLog(@"TRAP #%d 添加到核心数据!", i);' 之后将所有属性设置为单个对象,但结果相同。
    • @IdanMoshe: [[NSManagedObject alloc] initWithEntity:...] 创建一个新对象,而不是保存操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    相关资源
    最近更新 更多