2017-02-14 10 views
0

Я новичок в iOS, и перед вами стоит проблема сохранения восстановленных данных массива в данных Core. Как показан в ImageКак сохранить данные о перестановке массива в основных данных в Objective C

enter image description here

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

Для этого моего кода, как это

NSString *[email protected]""; 
    NSString *[email protected]""; 

    NSManagedObjectContext *context = [self managedObjectContext]; 
    NSError *error; 

    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    [request setEntity:[NSEntityDescription entityForName:@"AuditPost" inManagedObjectContext:context]]; 

    // NSError *error = nil; 
    NSArray *results = [context executeFetchRequest:request error:&error]; 
    NSLog(@"Result =%@",results); 

    int imageSize = imgData.length; 
    NSLog(@"size of image in KB: %d ", imageSize/1024); 
    int OCS=imageSize/1024; 

    NSLog(@"OCS Image Size =%d",OCS); 

    if(OCS<2) 
    { 
     [email protected]""; 
    } 

    ComplareArray=[devices valueForKey:@"checkpointid"]; 

    BOOL contains = [ComplareArray containsObject:String2]; 

    if(contains == NO) 
    { 
     if (self.device) { 
      // Update existing device 
      [device setValue:Audit forKey:@"auditnameId"]; 
      [device setValue:String forKey:@"checklistid"]; 
      [device setValue:String2 forKey:@"checkpointid"]; 
      [device setValue:FailString forKey:@"failreason"]; 
      [device setValue:WarningString forKey:@"warningreason"]; 
      [device setValue:AuditStartDate forKey:@"starttimedate"]; 
      [device setValue:userid forKey:@"userid"]; 
      [device setValue:AuditImageString forKey:@"auditimage"]; 

      NSError *error = nil; 
      // Save the object to persistent store 
      if (![context save:&error]) { 
       NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); 
      } 

     } else { 
      // Create a new device 
      NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"AuditPost" inManagedObjectContext:context]; 
      [newDevice setValue:Audit forKey:@"auditnameId"]; 
      [newDevice setValue:String forKey:@"checklistid"]; 
      [newDevice setValue:String2 forKey:@"checkpointid"]; 
      [newDevice setValue:FailString forKey:@"failreason"]; 
      [newDevice setValue:WarningString forKey:@"warningreason"]; 
      [newDevice setValue:AuditStartDate forKey:@"starttimedate"]; 
      [newDevice setValue:userid forKey:@"userid"]; 
      [newDevice setValue:AuditImageString forKey:@"auditimage"]; 

      NSError *error = nil; 
      // Save the object to persistent store 
      if (![context save:&error]) { 
       NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); 
      } 
     } 
    } 
    else 
    { 
     NSError *error = nil; 
     // Save the object to persistent store 
     if (![context save:&error]) { 
      NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); 
     } 

     NSManagedObjectContext *context = [self managedObjectContext]; 

     NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
     [request setEntity:[NSEntityDescription entityForName:@"AuditPost" inManagedObjectContext:context]]; 

     NSArray *results = [context executeFetchRequest:request error:&error]; 
     NSManagedObject* favoritsGrabbed = [results objectAtIndex:CurrentIndexPath]; 
     [favoritsGrabbed setValue:String forKey:@"checklistid"]; 
     // Save the object to persistent store 
     if (![context save:&error]) { 
      NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); 
     } 
    } 

    //example reload table 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [Audittable reloadData]; 
    }); 

Чтобы сохранить все массив в основных данных Я использую код, подобный этому

if (self.device) 
      { 
       // Update existing device 
       [device setValue:Audit forKey:@"auditnameId"]; 
       [device setValue:[NSString stringWithFormat:@"%@",Passarray[i]] forKey:@"checklistid"]; 
       [device setValue:[NSString stringWithFormat:@"%@",CheckpointNameIDArray[i]] forKey:@"checkpointid"]; 
       [device setValue:FailString forKey:@"failreason"]; 
       [device setValue:WarningString forKey:@"warningreason"]; 
       [device setValue:AuditStartDate forKey:@"starttimedate"]; 
       [device setValue:userid forKey:@"userid"]; 
       [device setValue:[NSString stringWithFormat:@"%@",AuditImageString] forKey:@"auditimage"]; 
       NSError *error = nil; 
       // Save the object to persistent store 
       if (![context save:&error]) { 
        NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); 
       } 
      } 
      else 
      { 
       // Create a new device 
       NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"AuditPost" inManagedObjectContext:context]; 
       [newDevice setValue:Audit forKey:@"auditnameId"]; 
       [newDevice setValue:[NSString stringWithFormat:@"%@",Passarray[i]] forKey:@"checklistid"]; 
       [newDevice setValue:[NSString stringWithFormat:@"%@",CheckpointNameIDArray[i]] forKey:@"checkpointid"]; 
       [newDevice setValue:FailString forKey:@"failreason"]; 
       [newDevice setValue:WarningString forKey:@"warningreason"]; 
       [newDevice setValue:AuditStartDate forKey:@"starttimedate"]; 
       [newDevice setValue:userid forKey:@"userid"]; 
       [newDevice setValue:[NSString stringWithFormat:@"%@",AuditImageString] forKey:@"auditimage"]; 

       NSError *error = nil; 
       // Save the object to persistent store 
       if (![context save:&error]) { 
        NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); 
       } 
      } 
      } 
      for (int i=0; i<PassarrIndexPaths.count; i++) 
      { 
       AuditNextTableViewCell *cell = [Audittable cellForRowAtIndexPath:[PassarrIndexPaths objectAtIndex:i]]; 
       DataModel *model = [arrData objectAtIndex:i]; 
       model.strSelected = @"P"; 
       [cell.passbtn setBackgroundColor:[UIColor greenColor]]; 
       [cell.failbtn setBackgroundColor:[UIColor lightGrayColor]]; 
       [cell.wipbtn setBackgroundColor:[UIColor lightGrayColor]]; 
       [cell.nabtn setBackgroundColor:[UIColor lightGrayColor]]; 
      } 
//   Passbtn.backgroundColor=[UIColor greenColor]; 
//   NAbtn.backgroundColor=[UIColor lightGrayColor]; 
      [Audittable reloadData]; 

Как и в Image enter image description here Если я нажимаю на Марк Отложен как PASS это сохранить remaning элемента массива в основных данных, которые не select.For выбора Я использую код, как этого

NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; 
      NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"AuditPost"]; 
      self.devices = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy]; 

      for (int i=0; i<PassarrIndexPaths.count; i++) 
      { 
       AuditNextTableViewCell *cell = [Audittable cellForRowAtIndexPath:[PassarrIndexPaths objectAtIndex:i]]; 
       DataModel *model = [arrData objectAtIndex:i]; 

       if([model.strSelected isEqualToString:@"P"]) 
       { 

       } 
       else if ([model.strSelected isEqualToString:@"W"]) 
       { 

       } 
       else if ([model.strSelected isEqualToString:@"F"]) 
       { 

       } 
       else if ([model.strSelected isEqualToString:@"NA"]) 
       { 

       } 
       else if ([model.strSelected isEqualToString:@"NAA"]) 
       { 

       } 
       else 
       { 
        model.strSelected = @"PA"; 
        [cell.passbtn setBackgroundColor:[UIColor greenColor]]; 
        [cell.failbtn setBackgroundColor:[UIColor lightGrayColor]]; 
        [cell.wipbtn setBackgroundColor:[UIColor lightGrayColor]]; 
        [cell.nabtn setBackgroundColor:[UIColor lightGrayColor]]; 
       } 

Я перед проблемой является что, если я сохраню некоторые данные в основных данных then.How, чтобы сохранить восстановление данных массива в основных данных. Кто-нибудь сделал это. Спасибо в Adnavce!

+0

Что вы имеете в виду остальные данные? –

+0

Создайте модель объекта управления и сохраните контекст объекта управления. – Jitendra

+0

@Mukesh Как и в изображении, я сохранил одну строку из массива в основных данных. На клик Select all As Pass Мне нужно сохранить remaning данные массива, пропустить первый индекс и сохранить другое значение массива в основных данных. возможно? – Muju

ответ

0

Если я правильно, что вы хотите сохранить объект данных, который объект уже не существует в базе данных Do просто

-(void)save_UpdateData:(NSArray *)yourArray { 

    NSManagedObjectContext *_context = [self getManagedObjectContext]; 

    for(int i = 0; i < [yourArray count]; i++) { 
     NSDictionary *details = [yourArray objectAtIndex:i]; 
     NSArray *_arrayMappingObjects = [self getSavedDataFromDB]; 
     //Lets check mapping object exist in current record or not. 
     //If not exist then create new one and add the same 
     //If already exist, No need to add. 
     NSPredicate *_predicate = [NSPredicate predicateWithFormat:@"yourKey_predicate_id=%@",[NSNumber numberWithInt:[[details objectForKey:@"yourKey_predicate_id"] intValue]]]; 
     _arrayMappingObjects = [_arrayMappingObjects filteredArrayUsingPredicate:_predicate]; 
     if([_arrayMappingObjects count] > 0) { 

      //Object already exist, No need to add the same object. 

     } else { 
      // Lets create an object add newly created instance 
      ModelClass *modelObject = [NSEntityDescription insertNewObjectForEntityForName:@"ModelClass" inManagedObjectContext:_context]; 
      [modelObject setEntityName1:[details objectForKey:@"key1"]];//If your property is NSString 
      [modelObject setEntityName2:[NSNumber numberWithInt:[[details objectForKey:@"key2"] intValue]]];//If your property is NSNumber 
      [modelObject setEntityName3:[NSNumber numberWithInt:[[details objectForKey:@"key3"] intValue]]]; 

      [self saveContext]; 
     } 
    } 
} 

// Получить сохраненные данные

-(NSMutableArray *)getSavedDataFromDB { 

    NSMutableArray *_record = [[NSMutableArray alloc] initWithCapacity:0]; 

    NSManagedObjectContext *_context =[self getManagedObjectContext]; 
    NSFetchRequest *_fetchRequest = [[NSFetchRequest alloc]init]; 
    NSEntityDescription *_entityDesc =[NSEntityDescription entityForName:@"ModelClass" inManagedObjectContext:_context]; 
    [_fetchRequest setEntity:_entityDesc]; 

    NSError *_error; 
    NSArray *_fetchedOjects = [_context executeFetchRequest:_fetchRequest error:&_error]; 

    for(int i=0;i<[_fetchedOjects count];i++) { 
     ModelClass *modelObject = [_fetchedOjects objectAtIndex:i]; 
     [_record addObject:modelObject]; 
    } 
    return _record; 
} 
+0

Рассмотрите это как общее решение. Вы можете изменить свой код и логику в зависимости от вашей зависимости. –