Pregunta

tengo un Company entidad con aproximadamente 20 campos y quiero usar una revisión de tabla agrupada con encabezados de sección creados manualmente (es decir: general, financiero, misceláneo), pero no estoy seguro de cómo hacer que los datos centrales comprendan cómo tratar estos encabezados de sección y hacer Se relacionan solo con los datos que quiero mostrar en estos grupos.

Por ejemplo, el nombre, el logotipo, etc. se quedaría bajo los presupuestos generales, el efectivo estaría bajo financiero, etc.

Básicamente, quiero controlar los datos de los datos principales se colocan en cada categoría y mostrarlos.

En la muestra de libros principales está este código:

/*
 The data source methods are handled primarily by the fetch results controller
 */

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return [[fetchedResultsController sections] count];
}


// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
    return [sectionInfo numberOfObjects];
}

Pero, ¿cómo hago que comprenda que las secciones no están en datos centrales, sino que se crean manualmente?

¿Fue útil?

Solución

Tengo una respuesta a mi problema ahora, no sé si es el enfoque correcto, pero está funcionando y agradecería los comentarios.

Solo para aclarar cuál era el problema y lo que estaba tratando de hacer.

Tengo una entidad de datos central company Sin embargo, con aproximadamente 10 campos dentro de ellos, en lugar de enumerarlos todos de una vez, quería agrupar los campos de salida.

Por ejemplo, tengo alrededor de 6 campos relacionados con efectivo como "efectivo", "marketingbudget", "seobudget", etc. y quería agrupar estos datos en la vista de tabla, pero el problema era que no sabía cómo configurar una relación para que esa tabla.field.x perteneciera a Group.x, y así sucesivamente.

La respuesta a la que llegué fue usar una Plist/diccionario que prácticamente refleje la estructura de la entidad de datos básicas; y asigne la estructura a los grupos que quiero mostrar.

Mi diccionario se ve así;

(raíz)

-> CompanyTpl (matriz)

-> Artículo 0 (diccionario)

---> sección (string) = "General"

---> Niños (matriz) ------> Artículo 0 (diccionario)

----------> Key = "Nombre"

----------> valor = "Nombre de la empresa" ...

Donde el Key Sería una referencia para que los datos principales usen y muestren su contenido, si es necesario.

Donde el Value Sería que se exhibiría en CellforrowatIndExpath.

Entonces, en mi código, básicamente revisé la sección (con la cual me refiero a la sección TableView) y luego encuentro la información de los niños correlacionando de la Plist; y obtenga la clave/valor y use esto cuando sea necesario.

Aquí hay una versión recortada del código.

- (void)viewDidLoad {
    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"CompanyTpl" ofType:@"plist"];
    self.companyDictionary = [[NSDictionary dictionaryWithContentsOfFile:plistPath] retain];

    // self.tableDataSource is a NSMutableArray
    self.tableDataSource = [self.companyDictionary objectForKey:@"CompanyTpl"];

    // Debugging info
    NSLog(@"Section = 0");

    NSLog(@"%@", [self.tableDataSource objectAtIndex:0]);

    NSLog(@"Section Name = %@", [[self.tableDataSource objectAtIndex:0] objectForKey:@"Section"]);


    NSArray *sectionChildren = [[self.tableDataSource objectAtIndex:0] objectForKey:@"Data"];

    NSLog(@"Section Children = %@", sectionChildren);
    NSLog(@"Count of Section Children = %d", [sectionChildren count]);


}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return ([self.tableDataSource count]);
}

// Section header
-(NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    NSString *title = nil;

    title = [[self.tableDataSource objectAtIndex:section] objectForKey:@"Section"];

    return title;
}


// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{
NSInteger rows = 0;

    NSArray *sectionChildren = [[self.tableDataSource objectAtIndex:section] objectForKey:@"Data"];

    NSLog(@"Section Children = %@", sectionChildren);
    NSLog(@"Count of Section Children = %d", [sectionChildren count]);

    rows = [sectionChildren count];


    return rows;
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{

    NSArray *sectionChildren            = [[self.tableDataSource objectAtIndex:indexPath.section] objectForKey:@"Data"];
    NSDictionary *sectionChildrenData   = [sectionChildren objectAtIndex:indexPath.row];

    //NSLog(@"Section Children data = %@", sectionChildrenData);

    NSString *scKey     = [sectionChildrenData objectForKey:@"Key"];
    NSString *scValue   = [sectionChildrenData objectForKey:@"Value"];

    NSLog(@"scKey = %@", scKey);

    // Grab the data from Core Data using the scKey



    static NSString *CellIdentifier = @"defaultCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];


        //cell.textLabel.text = @"test";

        cell.textLabel.text = scValue;
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    }
    return cell;
}

La idea sería que puedo usar la clave al hacer referencia a los datos principales para obtener su contenido y mostrarlo en el controlador TableView en CellforrowatIndExpath Cell.textLabel.Text Value.

Uno podría ir un poco más en profundidad y tener más información en la Plist, como lo que debe ser el subtítulo, etc.

De todos modos, daría la bienvenida a los comentarios y pensamientos.

Gracias.

Otros consejos

Me he acercado un poco más a una respuesta, pero todavía tengo problemas para conectar elementos de datos principales para que estén en ciertas secciones.

#pragma mark -
#pragma mark Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    //return [[fetchedResultsController sections] count];

    //NSLog(@"%d", [self.sectionArray count] );

    return 4;
}

// Section header
-(NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    NSString *title = nil;

    switch (section) {
        case 0:
            title = @"General";
            break;
        case 1:
            title = @"Finanical";
            break;
        case 2:
            title = @"Category A";
            break;
        case 3:
            title = @"Category B";
            break;
        case 4:
            title = @"Misc";
            break;
        default:
            break;
    }

    return title;
}



// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{
    /*
    id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
    return [sectionInfo numberOfObjects];
     */

    NSInteger rows = 0;

    // The number of rows depend on the section
    switch (section) {
        case 0:
            rows = 2;
            break;
        case 1:
            rows = 3;
            break;
        case 2:
            rows = 4;
            break;
        default:
            break;
    }

    return rows;
}

Lo que esto hace es crear manualmente 4 secciones, los nombres no importan en este momento y luego creo un número diferente de filas para cada sección.

Hasta aquí todo bien.

El problema que tengo es hacer que los datos principales entiendan que en la sección0.row0 quiero que el textLabel diga el nombre de la empresa, etc.

Estoy pensando que todo esto tiene que estar en un diccionario, estableciendo toda la estructura que quiero y las etiquetas para mostrar; Y luego, en CellforrowatIndexpath, muestro la matriz dentro del diccionario que quiero.

es decir:

root] CompanyTPL (Array)

-> Artículo 0 (diccionario)

-----> Categoría (String) = "General"

-----> datos (matriz)

---------> Artículo 0 (Diccionario)

---------------> CdFieldName: Nombre

---------------> Pantalla: "Nombre de la empresa"

Donde CDFieldName es una referencia al nombre de campo dentro de los datos principales que quiero mostrar.

Si hay una forma alternativa de hacer esto, estaría interesado en averiguarlo.

Gracias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top