我一直在摸不着头脑,让这个问题解决了我的自我,但不幸的是我无法解决。
所以我的问题是我有多个值对应一个讲座,所以我做了讲课,教学讲座,讲课,学习程序关系,一对多关系如图所示。
我保存到DB中,如下所示:
-(void)saveToDatabase:(NSMutableDictionary *)inData{
LectureDetails *lectureDetail = (LectureDetails *)[NSEntityDescription insertNewObjectForEntityForName:@"LectureDetails" inManagedObjectContext:context];
[lectureDetail setAverageRating:[inData valueForKey:kLectureAverageRating]];
[lectureDetail setCategoryID:[inData valueForKey:kLectureCategoryID]];
[lectureDetail setCategoryName:[inData valueForKey:kLectureCategoryName]];
[lectureDetail setLectureID:[inData valueForKey:kLectureID]];
[lectureDetail setSemesterID:[inData valueForKey:@"SemesterID"]];
[lectureDetail setStartTime:[inData valueForKey:kLectureStartTime]];
[lectureDetail setRatingType:[inData valueForKey:kRatingType]];
[lectureDetail setMonth:[NSNumber numberWithInt:[[[[inData valueForKey:kLectureDate] componentsSeparatedByString:@"-"] objectAtIndex:1] integerValue]]];
[lectureDetail setDateOnly:[NSNumber numberWithInt:[[[[inData valueForKey:kLectureDate] componentsSeparatedByString:@"-"] objectAtIndex:2] integerValue]]];
for (id prof in [inData valueForKey:@"Professors"]) {
ProfessorsInLecture *profData = (ProfessorsInLecture *)[NSEntityDescription insertNewObjectForEntityForName:@"ProfessorsInLecture" inManagedObjectContext:context];
profData.professorID=[NSNumber numberWithInt:[[prof valueForKey:@"ProfessorID"]integerValue]] ;
profData.professorFirstName=[prof valueForKey:@"ProfessorFirstName"];
profData.professorLastName=[prof valueForKey:@"ProfessorLastName"];
profData.ProfessorUserName=[prof valueForKey:@"ProfessorUserName"];
[lectureDetail addLectureToProfessorObject:profData];
}
for (id prog in [inData valueForKey:@"StudyPrograms"]) {
StudyProgramInLecture *stdyProgramData = (StudyProgramInLecture *)[NSEntityDescription insertNewObjectForEntityForName:@"StudyProgramInLecture" inManagedObjectContext:context];
stdyProgramData.sMID=[prog valueForKey:@"SMID"];
[lectureDetail addLectureToStudyProgramObject:stdyProgramData];
}
for (id pblData in [inData valueForKey:@"PBLs"]) {
PBLinLectures *pbl = (PBLinLectures *)[NSEntityDescription insertNewObjectForEntityForName:@"PBLinLectures" inManagedObjectContext:context];
[pbl setLecturePBLID:[pblData valueForKey:@"LecturePBLID"]];
[pbl setPBLID:[pblData valueForKey:@"PBLID"]];
[lectureDetail addLectureToPBLObject:pbl];
}
NSError *error1;
if (![context save:&error1])
{
//NSLog(@"ERROR--%@",error);
abort();
}
}
所有数据都正确保存但我在获取数据方面遇到了问题。 现在假设我必须获取一个讲课,其中semesterID = 7,月份= 12,日期= 20,并且(在关系表中)sMID = 2和(在关系表中)pBLID = 4.
到目前为止我所做的是获取
-(NSMutableArray *)fetchDataforMonth:(NSNumber *)month andDate:(NSNumber *)dateOnly
{
NSEntityDescription *entity = [NSEntityDescription entityForName:@"LectureDetails" inManagedObjectContext:context];
// Setup the fetch request
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY lectureToPBL.pBLID ==%@", [NSNumber numberWithInt:[[[UserDetail sharedInstance].userDetail valueForKey:@"pBLID"]integerValue]]];
NSPredicate *pred1 =
[NSPredicate predicateWithFormat:@"(dateOnly == %@)",dateOnly];
NSPredicate *pred2 =
[NSPredicate predicateWithFormat:@"(month == %@)",month];
NSPredicate *pred3 =
[NSPredicate predicateWithFormat:@"(semesterID == %@)",[NSNumber numberWithInt:[[[UserDetail sharedInstance].userDetail valueForKey:@"semesterID"]integerValue]]];
NSPredicate *pred4 = [NSPredicate predicateWithFormat:@"ANY lectureToStudyProgram.sMID ==%@", [NSNumber numberWithInt:[[[UserDetail sharedInstance].userDetail valueForKey:@"programID"]integerValue]]];
NSArray *compPredicatesList = [NSArray arrayWithObjects:pred1,pred2,pred3,predicate,pred4, nil];
NSPredicate *CompPrediWithAnd = [NSCompoundPredicate andPredicateWithSubpredicates:compPredicatesList];
[request setPredicate: CompPrediWithAnd];
// Fetch the records and handle an error
NSError *error;
NSMutableArray *mutableFetchResults = [[context executeFetchRequest:request error:&error] mutableCopy];
return mutableFetchResults;
}
如果有一个sMID和一个pBLID,则提取工作正常,否则我没有获取获取结果中的对象。 假设我有一个讲座,其semesterID为7,月份为12,日期为20,并且有多个sMID,如1,2,3和倍数pBLID,如= 4,5,6 我想要一个月份= 12天和20天,sMID = 2且pBLID = 4的讲座
有人可以告诉我该怎么做吗?
任何帮助将不胜感激。 感谢
答案 0 :(得分:1)
首先从LectureDetails实体过滤月份= 12和日期= 20的讲师:
NSPredicate *pred = [NSPredicate predicateWithFormat:@"(month == %@) AND (dateOnly == %@) ",month, dateOnly];
[request setPredicate: pred];
NSError *error;
NSArray *lectureList = [context executeFetchRequest:request error:&error];
then filter this array with pBLID and sMID.
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(ANY lectureToStudyProgram.sMID ==%@) AND (ANY lectureToStudyPBL.pBLID ==%@)", sMID, pBLID];
lectureList = [lectureList filteredArrayUsingPredicate:predicate];
现在,讲座列表将为您提供结果。