addObject用于iPhone核心数据中的一对多对多关系

时间:2010-01-07 00:00:01

标签: iphone core-data insert

我的xcdatamodel中有以下2个实体:

  1. 矩阵 1.1属性 名称 1.2关系 MatrixToProcess 目的地是:流程 Inverse是:ProcessToMatrix 检查To-Many关系 删除规则是级联

  2. 过程 2.1属性 名称 2.2关系 ProcessToMatrix 目的地是:矩阵 反向是:MatrixToProcess 未检查To-Many关系 删除规则为Nullify

  3. 我可以成功添加一个新的Matrix,它会被添加并在UITableView中正确显示。

    我可以成功添加新进程,但是, 使用Matrix表中的Z_PK值的EXCEPTION将所有必要信息添加到数据库中。 即iPhone模拟器中的sqlite数据库将创建新的进程名称,但不会在ZPROCESSTOMATRIX列中输入任何信息。如果我手动插入关联的Matrix Name Z_PK值,一切正常。

    我正在努力。不完全了解如何在Process * newProcess = [NSEntityDescription insertNewObjectForEntityForName:@“Process”inManagedObjectContext:self.managedObjectContext];中添加addObject。 这是我正在使用的代码:

    - (void)addProcess:(id)sender {
        ProcessAddViewController *addController = [[ProcessAddViewController alloc] initWithNibName:@"ProcessAddView" bundle:nil];
        addController.delegate = self;  
        Process *newProcess = [NSEntityDescription insertNewObjectForEntityForName:@"Process" inManagedObjectContext:self.managedObjectContext];
        addController.process = newProcess;
        UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:addController];
        [self presentModalViewController:navigationController animated:YES];    
        [navigationController release];
        [addController release];
    }
    
    - (void)processAddViewController:(ProcessAddViewController *)processAddViewController didAddProcess:(Process *)process {
        if (process) {        
            [self showProcess:process animated:NO];
        }
    
        [self dismissModalViewControllerAnimated:YES];
    }
    
    
    - (void)showProcess:(Process *)process animated:(BOOL)animated {
        RootViewController *rootViewController = [[RootViewController alloc] initWithStyle:UITableViewStyleGrouped];
        rootViewController.managedObjectContext = self.managedObjectContext;    
        if(entitySearchPredicate == nil)
        {
            NSMutableArray* mutableFetchResults = [CoreDataHelper getObjectsFromContext:self.entityName :@"displayOrder" :YES :managedObjectContext];       
            [self setEntityArray:mutableFetchResults];
            [mutableFetchResults release];
        }
        else
        {
            NSMutableArray* mutableFetchResults = [CoreDataHelper searchObjectsInContext:self.entityName :entitySearchPredicate :@"displayOrder" :YES :managedObjectContext];
            [self setEntityArray:mutableFetchResults];
            [mutableFetchResults release];
        }
        [rootViewController release];
    }
    

    非常感谢任何帮助和/或指示。

1 个答案:

答案 0 :(得分:0)

您需要设置新流程和Matrix之间的关系。

查看this answeriphone core data inserting new objects question

更新

假设您已经为Process和Matrix生成了类文件并且Process与Matrix有一个名为“processToMatrix”的关系,那么设置关系的代码将是:

newProcess.processToMatrix = matrix;

其中“matrix”是应该与新Process对象关联的Matrix对象。