2014-04-02 93 views
0

我在过滤数据时遇到问题。我有两个表格,patientconsultation,它们具有一对多关系,使得consultation包含患者ID。当我将数据存储在核心数据中时,我得到UITableView中的患者列表,但是当我使用NSPredicate在第二个UITableView中筛选每个患者的咨询时,我正在创建重复值。NSPredicate返回重复值

- (NSMutableArray *)getAllConsultations 
{ 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Consultation" inManagedObjectContext:self.managedObjectContext]; 
    [fetchRequest setEntity:entity]; 


    NSString *Id = idPatientConsultation; 
    int idPatient = [Id intValue]; 
    NSLog(@" id Patient Consultation : %@",Id); 


    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"id_patient == %i",idPatient]; 
    [fetchRequest setPredicate:predicate]; 

    NSError *error; 
    NSArray *arrayConsultations = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error]; 
    NSLog(@"Nombre de Consultations : %d",arrayConsultations.count); 
    NSMutableArray *mutConsultationsList = [NSMutableArray arrayWithArray:arrayConsultations]; 

    return mutConsultationsList; 

} 

阵列协商日志:

"<Consultation: 0x8d91680> (entity: Consultation; id: 0x8d7a840 <x-coredata://AF78BE86-9E6A-487C-9E49-F720ACF831E4/Consultation/p117> ; data: {\n \"date_consultation\" = \"2014-03-25 13:28:11 +0000\";\n \"id_consultation\" = 24;\n \"id_patient\" = 2;\n motif = aaaaaaaa;\n observation = rien;\n patient = nil;\n poids = \"55 kg\";\n pouls = 60;\n taille = \"1,80 m\";\n temperature = \"37\\U00b0C\";\n \"tension_arterielle\" = \"12,52\";\n})", 

"<Consultation: 0x8d5d840> (entity: Consultation; id: 0x8d88350 <x-coredata://AF78BE86-9E6A-487C-9E49-F720ACF831E4/Consultation/p118> ; data: {\n \"date_consultation\" = \"2014-02-27 11:09:03 +0000\";\n \"id_consultation\" = 21;\n \"id_patient\" = 2;\n motif = \"tout va bien\";\n observation = sava;\n patient = nil;\n poids = 60;\n pouls = 80;\n taille = \"1.65\";\n temperature = \"37\\U00b0C\";\n \"tension_arterielle\" = \"12.42\";\n})", 

"<Consultation: 0x8d5fa50> (entity: Consultation; id: 0x8d7de80 <x-coredata://AF78BE86-9E6A-487C-9E49-F720ACF831E4/Consultation/p121> ; data: {\n \"date_consultation\" = \"2014-03-25 13:28:11 +0000\";\n \"id_consultation\" = 24;\n \"id_patient\" = 2;\n motif = aaaaaaaa;\n observation = rien;\n patient = nil;\n poids = \"55 kg\";\n pouls = 60;\n taille = \"1,80 m\";\n temperature = \"37\\U00b0C\";\n \"tension_arterielle\" = \"12,52\";\n})", 

"<Consultation: 0x8d5fab0> (entity: Consultation; id: 0x8d80030 <x-coredata://AF78BE86-9E6A-487C-9E49-F720ACF831E4/Consultation/p124> ; data: {\n \"date_consultation\" = \"2014-02-27 11:09:03 +0000\";\n \"id_consultation\" = 21;\n \"id_patient\" = 2;\n motif = \"tout va bien\";\n observation = sava;\n patient = nil;\n poids = 60;\n pouls = 80;\n taille = \"1.65\";\n temperature = \"37\\U00b0C\";\n \"tension_arterielle\" = \"12.42\";\n})", 

"<Consultation: 0x8d647e0> (entity: Consultation; id: 0x8d7baa0 <x-coredata://AF78BE86-9E6A-487C-9E49-F720ACF831E4/Consultation/p127> ; data: {\n \"date_consultation\" = \"2014-02-27 11:09:03 +0000\";\n \"id_consultation\" = 21;\n \"id_patient\" = 2;\n motif = \"tout va bien\";\n observation = sava;\n patient = nil;\n poids = 60;\n pouls = 80;\n taille = \"1.65\";\n temperature = \"37\\U00b0C\";\n \"tension_arterielle\" = \"12.42\";\n})", 

"<Consultation: 0x8d655a0> (entity: Consultation; id: 0x8d70300 <x-coredata://AF78BE86-9E6A-487C-9E49-F720ACF831E4/Consultation/p129> ; data: {\n \"date_consultation\" = \"2014-03-25 13:28:11 +0000\";\n \"id_consultation\" = 24;\n \"id_patient\" = 2;\n motif = aaaaaaaa;\n observation = rien;\n patient = nil;\n poids = \"55 kg\";\n pouls = 60;\n taille = \"1,80 m\";\n temperature = \"37\\U00b0C\";\n \"tension_arterielle\" = \"12,52\";\n})" 

) 2014年4月2日10:15:58.555 doctorApplication [2983:A0B]农布雷DES协商:6

这里是代码将数据存储在数据库中

-(void)listeDesConsultations{ 

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
[manager GET:@"http://127.0.0.1:8888/services/consultation.php" parameters:nil 

    success:^(AFHTTPRequestOperation *operation, id responseObject) 
{ 

    NSLog(@"JSON out : %@",responseObject); 

    ConsultationsTab = (NSArray *) [responseObject valueForKeyPath:@"items"]; 

    NSLog(@"nombre des elements : %d", ConsultationsTab.count); 

    for (Consultation *consultation in consultationsList) { 
     [consultation.managedObjectContext deleteObject:consultation]; 
    } 

    [self.managedObjectContext save:nil]; 



    for (int i=0; i<ConsultationsTab.count; i++) { 


Consultation *consultation = [NSEntityDescription insertNewObjectForEntityForName:@"Consultation" 
                  inManagedObjectContext:self.managedObjectContext]; 


     NSDictionary *consultationDic = [ConsultationsTab objectAtIndex:i]; 

     // NSLog(@"your name is : %@ %@", [consultationDic objectForKey:@"id_consultation"], [consultationDic objectForKey:@"id_patient"]); 

     //id consultation// 
     NSString *idConsultation = [NSString stringWithFormat:@"%@",[consultationDic objectForKey:@"id_consultation"]]; 
     int idValue = [idConsultation intValue]; 
     NSNumber *idNumber = [NSNumber numberWithInt:idValue]; 

     consultation.id_consultation = idNumber; 

     NSString *idPatient = [NSString stringWithFormat:@"%@",[consultationDic objectForKey:@"id_patient"]]; 
     int idVal = [idPatient intValue]; 
     NSNumber *idNum = [NSNumber numberWithInt:idVal]; 

     consultation.id_patient = idNum; 

     NSString* strDate = [consultationDic objectForKey:@"date_consultation"]; 
     NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
     [formatter setTimeZone:[NSTimeZone systemTimeZone]]; 
     [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

     NSDate *date = [formatter dateFromString:strDate]; 
     // NSLog(@"Date de consultation : %@",date); 

     consultation.date_consultation = date; 




     consultation.taille = [consultationDic objectForKey:@"taille"]; 
     consultation.poids = [consultationDic objectForKey:@"poids"]; 
     consultation.pouls = [consultationDic objectForKey:@"pouls"]; 
     consultation.motif = [consultationDic objectForKey:@"motif_consultation"]; 

     consultation.observation = [consultationDic objectForKey:@"observation"]; 
     consultation.temperature = [consultationDic objectForKey:@"temperature"]; 
     consultation.tension_arterielle = [consultationDic objectForKey:@"tension_arterielle"]; 



    } 



    NSError *error; 
    if (![self.managedObjectContext save:&error]) 
    { 
     NSLog(@"Problème d'enregistrement : %@",[error localizedDescription ]); 
    } 

    consultationsList = [self getAllConsultations]; 
    [self.tableConsultation reloadData]; 
    NSLog(@"hello"); 



} 

    failure:^(AFHTTPRequestOperation *operation, NSError *error) 
{ 

    NSLog(@"Error : %@",error); 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"error" 
                message:[NSString stringWithFormat:@" %@",error] 
                delegate:nil 
              cancelButtonTitle:@"OK" 
              otherButtonTitles:nil]; 
    [alert show]; 
}]; 

} 

删除前:

Consultation list (
"<Consultation: 0xa1456e0> (entity: Consultation; id: 0xa137b80 <x-coredata://AF78BE86-9E6A-487C-9E49-F720ACF831E4/Consultation/p197> ; data: {\n \"date_consultation\" = \"2014-03-25 13:28:11 +0000\";\n \"id_consultation\" = 24;\n \"id_patient\" = 2;\n motif = aaaaaaaa;\n observation = rien;\n patient = nil;\n poids = \"55 kg\";\n pouls = 60;\n taille = \"1,80 m\";\n temperature = \"37\\U00b0C\";\n \"tension_arterielle\" = \"12,52\";\n})", 

"<Consultation: 0xa1459a0> (entity: Consultation; id: 0xa13d5d0 <x-coredata://AF78BE86-9E6A-487C-9E49-F720ACF831E4/Consultation/p198> ; data: {\n \"date_consultation\" = \"2014-02-27 11:09:03 +0000\";\n \"id_consultation\" = 21;\n \"id_patient\" = 2;\n motif = \"tout va bien\";\n observation = sava;\n patient = nil;\n poids = 60;\n pouls = 80;\n taille = \"1.65\";\n temperature = \"37\\U00b0C\";\n \"tension_arterielle\" = \"12.42\";\n})", 

"<Consultation: 0xa145a70> (entity: Consultation; id: 0xa138eb0 <x-coredata://AF78BE86-9E6A-487C-9E49-F720ACF831E4/Consultation/p202> ; data: {\n \"date_consultation\" = \"2014-02-27 11:09:03 +0000\";\n \"id_consultation\" = 21;\n \"id_patient\" = 2;\n motif = \"tout va bien\";\n observation = sava;\n patient = nil;\n poids = 60;\n pouls = 80;\n taille = \"1.65\";\n temperature = \"37\\U00b0C\";\n \"tension_arterielle\" = \"12.42\";\n})", 

"<Consultation: 0xa145b40> (entity: Consultation; id: 0xa127be0 <x-coredata://AF78BE86-9E6A-487C-9E49-F720ACF831E4/Consultation/p203> ; data: {\n \"date_consultation\" = \"2014-03-25 13:28:11 +0000\";\n \"id_consultation\" = 24;\n \"id_patient\" = 2;\n motif = aaaaaaaa;\n observation = rien;\n patient = nil;\n poids = \"55 kg\";\n pouls = 60;\n taille = \"1,80 m\";\n temperature = \"37\\U00b0C\";\n \"tension_arterielle\" = \"12,52\";\n})" 

删除:

2014-04-02 11:55:24.406 doctorApplication[6760:a0b] Consultation list (
"<Consultation: 0xa1456e0> (entity: Consultation; id: 0xa137b80 <x-coredata://AF78BE86-9E6A-487C-9E49-F720ACF831E4/Consultation/p197> ; data: <fault>)", 

"<Consultation: 0xa1459a0> (entity: Consultation; id: 0xa13d5d0 <x-coredata://AF78BE86-9E6A-487C-9E49-F720ACF831E4/Consultation/p198> ; data: <fault>)", 

"<Consultation: 0xa145a70> (entity: Consultation; id: 0xa138eb0 <x-coredata://AF78BE86-9E6A-487C-9E49-F720ACF831E4/Consultation/p202> ; data: <fault>)", 

"<Consultation: 0xa145b40> (entity: Consultation; id: 0xa127be0 <x-coredata://AF78BE86-9E6A-487C-9E49-F720ACF831E4/Consultation/p203> ; data: <fault>)" 

+0

显示'arrayConsultations'的日志。 – Wain

+0

这个病人只有2个咨询,它告诉我6 –

+1

如果你看他们是不同的ID,它会出现你插入他们不止一次在第一个地方 – Flexicoder

回答

1

但是您所创建的数据,并将其添加到数据存储是错的 - 你实际上有数据的重复数据商店。

您可以在日志中看到您有一组物品,其中包含要求的id_patient,并且该集合中的每个物品都是不同的物品,其中一些物品具有重复的id_consultation

当您导入数据时,您可能没有检查具有指定的id_consultation/id_patient的现有项目。您应该检查并更新现有实例,而不是仅创建新实例。

+0

中包含重复的数据我该如何做到这一点对不起,但即时新的ios开发 的东西是我解析他们从一个Web服务我删除旧数据,并将其添加到基地,当我做这样的事情它确定,但是当我评论解析功能和只读从数据库离线模式它重复每次我从一个病人到另一个 –

+0

你需要显示你的代码,你编辑/添加到数据存储... – Wain

+0

请任何帮助 –