通过循环将托管对象加载到Core Data中

时间:2013-12-27 06:34:27

标签: ios iphone objective-c core-data

我在两个实体之间有one-to-many个关系。我正在尝试通过循环加载many个实体,但似乎没有添加任何内容。这是一个代码示例:

 for(int x=0; x<[_array count]; x++)
     {
          SOCommand* newCommand = [NSEntityDescription insertNewObjectForEntityForName:@"SOCommand" inManagedObjectContext:self.managedObjectContext];
          newCommand.commandName = [(NSArray*)[_array objectAtIndex:x]objectAtIndex:0];
          newCommand.sshCommand =  [(NSArray*)[_array objectAtIndex:x]objectAtIndex:1];
          [newModule.socommand.allObjects arrayByAddingObject:newCommand];

     }
    [self.managedObjectContext save:nil];

newModule是“父”,在使用前初始化:

SOModule* newModule = [NSEntityDescription insertNewObjectForEntityForName:@"SOModule" inManagedObjectContext:self.managedObjectContext];

要检查是否添加,我尝试执行以下操作:

NSArray* commands = [iteratorModule.socommand allObjects];
            if([commands count] >0){
                NSLog(@"array was populated");
            }

日志未被解雇。

1 个答案:

答案 0 :(得分:1)

问题是arrayByAddingObject:返回一个你没有分配给任何东西的数组。

最好的解决方案就是从newCommand对象设置关系。替换:

[newModule.socommand.allObjects arrayByAddingObject:newCommand];

newCommand.module = newModule;      //Not sure what the relationship name is here, so it might not be module   

另外,我认为您不了解第一行代码,

[newModule.socommand.allObjects arrayByAddingObject:newCommand];

它获取与NSSet关联的socommand个对象的newModule(类似于NSArray的集合),然后使用allObjects方法将其放入数组形式。 arrayByAddingObject:返回一个新数组,其中包含一个你不做任何事情的新对象。