2013-08-21 3 views
0

У меня есть три лицаосновных данных один ко многим ошибка записи вставки

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

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

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

Я получаю эту ошибку:

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

Теперь я сохранить строку для форм лица первой позже мне нужно принести последняя запись о форме объекта создать новую строку на JSAjobs с подробной информацией о JSAjop как ближайшие

Благодарности

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 
+0

К сожалению у меня есть ошибки в отношениях псевдокоде – Jose

+0

К сожалению у меня есть ошибки в отношениях псевдокод таким образом формы {имя: строка задание <-->> JSAjobs.form} JSAjobs {имя: строка шаги <-->> jobsDetail.jobs} Спасибо – Jose

ответ

0

Ваши объекты очень сбивают с толку, потому что вы не выбрали используемые имена сущностей. Вы были слишком смущены, чтобы самим проложить эти простые отношения. Это приводит к хаотическому коду и не позволяет вам мыслить структурированным образом.

Ваш код совершенно непонятен. У вас есть массив данных, несмотря на выбранный контроллер результатов (предположительно). Вторая часть вашего кода имеет таинственный и загадочный новый объект JOBsob. Ни в коем случае вы не можете задать столь важный вопрос, не говоря уже о получении ответа.

У вас есть вложенные массивы без каких-либо проверок типов, которые обязательно ломаются и никак невозможно отладить. Избавьтесь от всех этих.

Тем не менее, давайте пять его попробовать, чтобы вы начали:

Во-первых, это не имеет смысла использовать множественное число для имени объекта. Если предприятие представляет собой «форму», оно должно быть Form не Forms.

Может быть, вы хотите эту установку:

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

Одна работа имеет много форм и много деталей работы. Таким образом, у формы есть отношения 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; 
+0

Я сказал, чтобы ** Большого спасибо ** за объяснение, я реорганизовал структуру как вы полагаете, все работает rfect. – Jose

Смежные вопросы