0

I have three entities

Forms{
    name:string
    jobs<-->>JSAjobs.form
}

JSAjobs{
    name:string
    form<<-->Forms.jobs
}

Jobs{
    step:string
    jobs<<-->Forms.jobs
}

I am getting this error:

to-many relationship fault "jobs" for objectID 0x95afe60. . . fulfilled from database. Got 0 rows

Now I save the row for Forms entity first later on I need to fetch the last record on the Form entity create a new row on JSAjobs with details on JSAjop like next

Thanks

    NSMutableArray *jobData = [[NSMutableArray alloc]initWithArray:controller.jobData];
NSManagedObjectContext *context = [self managedObjectContext];


NSError *error;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"JSAform" inManagedObjectContext:context];
[fetchRequest setEntity:entity];

NSPredicate *testForFalse = [NSPredicate predicateWithFormat:@"emailed == NO"];

[fetchRequest setPredicate:testForFalse];

NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

NSLog(@"Fetched Rows: %i", [fetchedObjects count]);

//NSManagedObject *existingParent= //... results of a fetch
JSAform *lastForm = [fetchedObjects objectAtIndex:0];

JSAjobs *newJobs = [NSEntityDescription insertNewObjectForEntityForName:@"JSAjobs" inManagedObjectContext:context];
// Setting new values
newJobs.jobType = [NSString stringWithFormat:@"%@", [jobData objectAtIndex:0]];
newJobs.jobName = [NSString stringWithFormat:@"%@", [[[jobData objectAtIndex:1]objectAtIndex:0] objectAtIndex:0]];
newJobs.comments = [NSString stringWithFormat:@"%@", [[[jobData objectAtIndex:1]objectAtIndex:0] objectAtIndex:1]];
newJobs.date = [NSDate date];
[newJobs setValue:lastForm forKey:@"form"];

if (![context save:&error]) {
    NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}

//New SOP Value
JOBsop *jobSOP = [NSEntityDescription insertNewObjectForEntityForName:@"JOBsop" inManagedObjectContext:context];
for (int i = 0; i< [[jobData objectAtIndex:1]count]; i++){
    NSLog(@"Value for key: %i", i);
    if (i > 0){
        for (int k = 0; k< [[[jobData objectAtIndex:1]objectAtIndex:i] count]; k++){

            jobSOP.step = [[[jobData objectAtIndex:1]objectAtIndex:i] objectAtIndex:k];
            [jobSOP setValue:newJobs forKey:@"jobs"];
       // [NSNumber numberWithInt:[txtBoots.text integerValue]];
        NSLog(@"Simple key: %@", [[[jobData objectAtIndex:1]objectAtIndex:i] objectAtIndex:k]);
        }
    }
}
if (![context save:&error]) {
    NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}
enter code here
4

1 回答 1

0

您的实体非常混乱,因为您没有选择可用的实体名称。你太困惑了,无法自己布置这些简单的关系。这会导致代码混乱,并且不允许您以结构化的方式思考问题。

您的代码完全无法理解。尽管有一个获取的结果控制器(大概),但您有一个数据数组。您的代码的第二部分显示了一个神秘而神秘的新实体JOBsob。你不可能问这样一个有意义的问题,更不用说得到答案了。

您有嵌套数组,没有任何类型检查,这必然会破坏并且以任何方式完全无法调试。摆脱所有这些。

不过,让我们尝试五次让您入门:

首先,对实体名称使用复数是没有意义的。如果实体代表一个“形式”,它应该Form不是Forms

也许你想要这个设置:

Form <<----> Job <----->> JobDetail

一份工作有许多表格和许多工作细节。所以 Form 有关系job,而 Job 有关系forms。同样, Jobdetail 有一个关系job,而 Job 有一个关系details

当您有一个表格并创建一个新工作时,您只能为其分配一个工作。因此,旧的工作(如果有的话)关系将被打破。

oldForm.job = newJob; 

这是一种更安全的分配关系的方法。当然,您已经为此目的为这些实体创建了 NSManagedObject 子类。

但是,如果 Job 和 Form 之间的关系在另一个方向上是一对多的,那么您的方案将如下所示。

Form <---->> Job <------>> JobDetail

在这种情况下,我现在真的不知道“表单”意味着什么——Project为了清楚起见,我将重命名它。

Project <---->> Job <------>> JobDetail

现在您可以将新工作分配给项目并链接其他关系,如下所示:

newJob.project = existingProject; 
newJobDetail.job = newJob; 
于 2013-08-21T23:37:44.900 回答