Recupere la suma de registros filtrados de los datos principales y se muestran los resultados a una etiqueta -- ios campo con core-data camp Relacionados El problema

Retrieve sum of filtered records from core data and display results to a label


0
vote

problema

Español

Quiero consultar a mi entidad "Dincome" para sumar el atributo "Crédito", pero solo quiero entusiasmo que tenga su atributo "DayStamp" igual a hoy. El siguiente código me acerca, pero no entiendo cómo terminar este código para generar la suma del atributo de crédito Dincome a una etiqueta en mi controlador de vista.

heres lo que tengo;

  //Get today date NSDate *dateSelect = [NSDate date];  //formate today date as day only "dd" NSDateFormatter *dfdd = [[NSDateFormatter alloc]init]; [dfdd setDateFormat:@"dd"]; NSString *formattedDatedd = [dfdd stringFromDate:dateSelect];  //Fetchrequest NSFetchRequest *request = [[NSFetchRequest alloc] init];  NSEntityDescription *entity = [NSEntityDescription entityForName:@"DIncome" inManagedObjectContext:context]; [request setEntity:entity];  // Specify that the request should return dictionaries. [request setResultType:NSDictionaryResultType];  // Create an expression for the key path. NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"credit"];  NSExpression *sumExpression = [NSExpression expressionForFunction:@"sum:" arguments:[NSArray arrayWithObject:keyPathExpression]];  // Create an expression description using the minExpression and returning a date. NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];  // The name is the key that will be used in the dictionary for the return value. [expressionDescription setName:@"sumCredit"]; [expressionDescription setExpression:sumExpression]; [expressionDescription setExpressionResultType:NSDateAttributeType];  // Set the request's properties to fetch just the property represented by the expressions. [request setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];  // Execute the fetch. NSError *error = nil; NSArray *objects = [context executeFetchRequest:request error:&error]; if (objects == nil) {     // Handle the error. } else {     if ([objects count] > 0) {         NSLog(@"Credit Sum: %@", [[objects objectAtIndex:0] valueForKey:@"sumCredit"]);         self.dayDisplayLabel.text = sumExpression;     } }   

Para la segunda parte de la pregunta que necesito para establecer la suma del crédito a mi DaydisplayLabel Esto no funciona porque es un puntero incompatible asignando NSSTRING a NSExpression

  self.dayDisplayLabel.text = sumExpression;   

¿Cómo hago esto derecho?

Original en ingles

I want to query my entity "DIncome" to sum the attribute "credit" But I only want entires that have their "daystamp" attribute equal to today. The following code gets me close but I don't understand how to finish this code in order to output the sum of credit DIncome attribute to a label on my view controller.

Heres what I got;

//Get today date NSDate *dateSelect = [NSDate date];  //formate today date as day only "dd" NSDateFormatter *dfdd = [[NSDateFormatter alloc]init]; [dfdd setDateFormat:@"dd"]; NSString *formattedDatedd = [dfdd stringFromDate:dateSelect];  //Fetchrequest NSFetchRequest *request = [[NSFetchRequest alloc] init];  NSEntityDescription *entity = [NSEntityDescription entityForName:@"DIncome" inManagedObjectContext:context]; [request setEntity:entity];  // Specify that the request should return dictionaries. [request setResultType:NSDictionaryResultType];  // Create an expression for the key path. NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"credit"];  NSExpression *sumExpression = [NSExpression expressionForFunction:@"sum:" arguments:[NSArray arrayWithObject:keyPathExpression]];  // Create an expression description using the minExpression and returning a date. NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];  // The name is the key that will be used in the dictionary for the return value. [expressionDescription setName:@"sumCredit"]; [expressionDescription setExpression:sumExpression]; [expressionDescription setExpressionResultType:NSDateAttributeType];  // Set the request's properties to fetch just the property represented by the expressions. [request setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];  // Execute the fetch. NSError *error = nil; NSArray *objects = [context executeFetchRequest:request error:&error]; if (objects == nil) {     // Handle the error. } else {     if ([objects count] > 0) {         NSLog(@"Credit Sum: %@", [[objects objectAtIndex:0] valueForKey:@"sumCredit"]);         self.dayDisplayLabel.text = sumExpression;     } } 

For the second part of the question I need to set the sum of the credit to my dayDisplayLabel This is not working because its an incompatible pointer assigning NSString to NSExpression

self.dayDisplayLabel.text = sumExpression; 

How do I make this right?

     

Lista de respuestas

0
 
vote

Puede usar public List<T> Filter<T>( List<T> collection, string property, string filterValue) { var filteredCollection = new List<T>(); foreach (var item in collection) { // To check multiple properties use, // item.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance) var propertyInfo = item.GetType() .GetProperty(property, BindingFlags.Public | BindingFlags.Instance); if (propertyInfo == null) throw new NotSupportedException("property given does not exists"); var propertyValue = propertyInfo.GetValue(item, null); if (propertyValue == filterValue) filteredCollection.Add(item); } return filteredCollection; } 1 con public List<T> Filter<T>( List<T> collection, string property, string filterValue) { var filteredCollection = new List<T>(); foreach (var item in collection) { // To check multiple properties use, // item.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance) var propertyInfo = item.GetType() .GetProperty(property, BindingFlags.Public | BindingFlags.Instance); if (propertyInfo == null) throw new NotSupportedException("property given does not exists"); var propertyValue = propertyInfo.GetValue(item, null); if (propertyValue == filterValue) filteredCollection.Add(item); } return filteredCollection; } 2 para recuperar solo ciertos atributos de sus objetos administrados. Si desea limitar los registros grabados, puede usar NSPRedicate (Hechos como la cláusula WHERE en una declaración SQL).

 

You can use [request setResultType:NSDictionaryResultType] with propertiesToFetch to retrieve only certain attributes of your managed objects. If you want to limit the recorded records, you can use NSPredicate (acts like the WHERE clause in a SQL statement).

 
 
         
         
0
 
vote

Las solicitudes de recuperación devuelven sus resultados como matrices de objetos administrados. Puede obtener valores de atributos de esos objetos. En su caso, obtiene una matriz de objetos administrados que representan el tipo de entidad public List<T> Filter<T>( List<T> collection, string property, string filterValue) { var filteredCollection = new List<T>(); foreach (var item in collection) { // To check multiple properties use, // item.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance) var propertyInfo = item.GetType() .GetProperty(property, BindingFlags.Public | BindingFlags.Instance); if (propertyInfo == null) throw new NotSupportedException("property given does not exists"); var propertyValue = propertyInfo.GetValue(item, null); if (propertyValue == filterValue) filteredCollection.Add(item); } return filteredCollection; } 3 . Si subclase public List<T> Filter<T>( List<T> collection, string property, string filterValue) { var filteredCollection = new List<T>(); foreach (var item in collection) { // To check multiple properties use, // item.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance) var propertyInfo = item.GetType() .GetProperty(property, BindingFlags.Public | BindingFlags.Instance); if (propertyInfo == null) throw new NotSupportedException("property given does not exists"); var propertyValue = propertyInfo.GetValue(item, null); if (propertyValue == filterValue) filteredCollection.Add(item); } return filteredCollection; } 4 , estas son instancias de su subclase; Si no ha subclase, entonces son instancias de public List<T> Filter<T>( List<T> collection, string property, string filterValue) { var filteredCollection = new List<T>(); foreach (var item in collection) { // To check multiple properties use, // item.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance) var propertyInfo = item.GetType() .GetProperty(property, BindingFlags.Public | BindingFlags.Instance); if (propertyInfo == null) throw new NotSupportedException("property given does not exists"); var propertyValue = propertyInfo.GetValue(item, null); if (propertyValue == filterValue) filteredCollection.Add(item); } return filteredCollection; } 5 .

Para obtener valores de los atributos de cadena de estas instancias, use la codificación de valor clave. Si su atributo se llamó "Título", obtendría el valor de la cadena del primer objeto con:

  public List<T> Filter<T>(     List<T> collection,      string property,      string filterValue) {     var filteredCollection = new List<T>();     foreach (var item in collection)     {          // To check multiple properties use,          // item.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance)           var propertyInfo =               item.GetType()                  .GetProperty(property, BindingFlags.Public | BindingFlags.Instance);          if (propertyInfo == null)              throw new NotSupportedException("property given does not exists");                        var propertyValue = propertyInfo.GetValue(item, null);          if (propertyValue == filterValue)              filteredCollection.Add(item);            }      return filteredCollection; } 6  

Obtenga los valores de cualquier otro atributo utilizando un código similar.

Si desea que la solicitud de búsqueda solo incluya un subconjunto de las instancias de public List<T> Filter<T>( List<T> collection, string property, string filterValue) { var filteredCollection = new List<T>(); foreach (var item in collection) { // To check multiple properties use, // item.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance) var propertyInfo = item.GetType() .GetProperty(property, BindingFlags.Public | BindingFlags.Instance); if (propertyInfo == null) throw new NotSupportedException("property given does not exists"); var propertyValue = propertyInfo.GetValue(item, null); if (propertyValue == filterValue) filteredCollection.Add(item); } return filteredCollection; } 7 , mire en public List<T> Filter<T>( List<T> collection, string property, string filterValue) { var filteredCollection = new List<T>(); foreach (var item in collection) { // To check multiple properties use, // item.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance) var propertyInfo = item.GetType() .GetProperty(property, BindingFlags.Public | BindingFlags.Instance); if (propertyInfo == null) throw new NotSupportedException("property given does not exists"); var propertyValue = propertyInfo.GetValue(item, null); if (propertyValue == filterValue) filteredCollection.Add(item); } return filteredCollection; } 8 . Puede usar esto como una cláusula de SQL "donde" para solicitar solo instancias que coincidan con criterios específicos, por ejemplo:

  public List<T> Filter<T>(     List<T> collection,      string property,      string filterValue) {     var filteredCollection = new List<T>();     foreach (var item in collection)     {          // To check multiple properties use,          // item.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance)           var propertyInfo =               item.GetType()                  .GetProperty(property, BindingFlags.Public | BindingFlags.Instance);          if (propertyInfo == null)              throw new NotSupportedException("property given does not exists");                        var propertyValue = propertyInfo.GetValue(item, null);          if (propertyValue == filterValue)              filteredCollection.Add(item);            }      return filteredCollection; } 9  
 

Fetch requests return their results as arrays of managed objects. You can get attribute values from those objects. In your case you get an array of managed objects representing the DIncome entity type. If you subclassed NSManagedObject then these are instances of your subclass; if you didn't subclass then they're instances of NSManagedObject.

To get values of string attributes from these instances, use key-value coding. If your attribute were named "title", you'd get the string value of the first object with:

NSString *firstTitle = [mutableFetchResults[0] valueForKey:@"title"]; 

Get the values of any other attributes using similar code.

If you want the fetch request to only include a subset of the instances of DIncome, look into NSPredicate. You can use this like a SQL "WHERE" clause to request only instances matching specific criteria, e.g.:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", someNameString]; [request setPredicate:predicate]; 
 
 
0
 
vote
vote
La mejor respuesta
 

Para filtrar los resultados de su consulta, debe establecerse para obtener su solicitud, así

  public0  

y para mostrar esto a su etiqueta, use la misma línea que está utilizando en la línea NSLOG.

  public1  

Si se vería así,

  public2  

espero que esto ayude!

 

In order to filter your query results you need to setPredicate for your request like so

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"daystamp = %@", formattedDatedd]; [request setPredicate:predicate]; 

And to display this to your label, use the same line you are using in the NSLog line.

[[objects objectAtIndex:0] valueForKey:@"sumCredit"] 

if would look like this,

self.dayDisplayLabel.text = [[objects objectAtIndex:0] valueForKey:@"sumCredit"]; 

Hope this helps!

 
 

Relacionados problema

0  AutoSaving de Coredata y no cargando todos los datos después de AutoSave  ( Coredata autosaving and not loading all data after autosave ) 
Tengo una subclase de nsmersistentdocument usando subclases NSManagedObject para mis datos. Cuando se abre un nuevo documento, hago alguna inicialización de...

2  Obtención de la suma de todas las instancias de la entidad B de un caso determinado de la entidad A  ( Getting the sum of all instances of entity b from a given instance of entity a ) 
Tengo una relación a muchos entre la entidad A y la entidad B (Aplicación de datos de IOS CORE). Necesito obtener la suma del atributo NSDecimalNumber de toda...

0  Swift 3 TableView.ReloadData bloquea la aplicación  ( Swift 3 tableview reloaddata crashes the app ) 
Tengo una vista de tabla que obtiene datos de los datos principales. Esto funciona bien, pero si envío el comando tbl.reloaddata, chrashes mi aplicación. Es...

1  ¿Cómo acceder de manera programática los valores MIN y MAX definidos en un modelo de datos principales diseñados con Xcode?  ( How to programaticly access min and max values defined in a core data model desi ) 
Esperaba encontrar eso en la clase NSATtributeDescription, pero solo el valor predeterminado está ahí. Detrás de la escena, me creó un estado de validez, pe...

0  Usando Gamkit para transferir datos de Coredata entre iPhones, a través de NSDictionary  ( Using gamekit to transfer coredata data between iphones via nsdictionary ) 
Tengo una solicitud donde me gustaría intercambiar información, administrado a través de datos básicos, entre dos iPhones. Primero convirtiendo el objeto de...

6  Datos del núcleo del iPhone: ¿Los atributos transformables tienen que transformarse solo para los datos?  ( Iphone core data do transformable attributes have to transform to only data ) 
He estado usando atributos transformables en los datos principales para transformar objetos complejos como imágenes y colores en datos en bruto. Tomé este ....

0  ¿Qué hace la casilla de verificación "Generar métodos de validación" en el diálogo de generación de clase de objeto administrado?  ( What does the generate validation methods checkbox in the managed object class ) 
¿Qué hace la casilla de verificación "Generar métodos de validación" en el cuadro de diálogo de generación de clase de objeto administrado? ...

0  Recuperando todos los objetos de un Nstreecontroller  ( Retrieving all of an nstreecontrollers objects ) 
bit de información de fondo, estoy usando un nsoutlineview con datos principales. Esto es lo que estoy tratando de hacer: Recupere todos los objetos del c...

0  Datos básicos: las relaciones de la entidad no funcionan como se esperaba  ( Core data entity relationships not working as expected ) 
He establecido mi modelo de datos en Xcode como SO entidades atta1 ATTA2 entityb attb1 Attb2 Attb3 Luego configuré las relaciones entidades N...

0  Cómo seleccionar la entidad correcta en DIDSSSELECTROWAT INDEXPAY  ( How to select the correct entity in didselectrowat indexpath ) 
MI tableview está ordenado por el atributo private ProgressDialog pDialog; // Creating JSON Parser object JSONParser jsonParser = new JSONParser(); Array...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos