mercredi 22 février 2012

Tableaux imbriqués

Je reste le diable loin de parler de Flash pour un moment.

Dans ma quête d'une bonne solution pour la manipulation basée sur des tables de montage vitres détail, j'ai fait des expériences avec l'aide de tableaux imbriqués à conduire la structure du tableau. Un tableau imbriqué est rien de plus qu'un tableau de tableaux (et je parle des instances NSArray ici). Le tableau principal ou externe contient une instance de NSArray pour chaque section et chaque sous-tableau contient un objet pour chaque ligne dans la section qu'il représente. Elle prend de multiples tableaux imbriqués pour tenir la structure d'une table, avec un tableau imbriqué détenant les étiquettes, une autre détenant les clefs, et une autre exploitation de la classe de la classe contrôleur qui peut être utilisé pour modifier cet élément. Ils sont jumelé tableaux imbriqués, Je suppose.

Cette solution est clé en main n'est pas aussi que le propriété liste de solutions conduit Je travaillais sur les premières, mais il est conceptuellement beaucoup plus facile à expliquer, et il n'est pas loin d'écureuil tout le code j'ai besoin de démontrer dans la complexité, les classes génériques. C'est un enfer de beaucoup mieux que d'avoir de grandes déclarations switch imbriqués dans votre classe contrôleur.

L'ensemble du processus que je développe sera affiché dans Plus l'iPhone 3 de développement, Mais voici une catégorie pour rendre plus facile à extraire des informations d'un tableau imbriqué dans le cas où vous voulez expérimenter sur votre propre. Cette catégorie ajoute une méthode pour NSArray qui vous permet de récupérer l'objet dès le tableau imbriqué pour un NSIndexPath donné. Notez que cette catégorie, comme les vues de table a été créée pour soutenir, ne supporte que les chemins indice simple qui stockent une ligne et une section.

NSArray-NestedArray.h
//
// NSArray-NestedArrays.h
#import <Foundation/Foundation.h>


@interface NSArray(NestedArrays)
/*!
This method will return an object contained with an array
contained within this array. It is intended to allow
single-step retrieval of objects in the nested array
using an index path
*/

- (id)nestedObjectAtIndexPath:(NSIndexPath *)indexPath;
@end



NSArray-NestedArray.m
//
// NSArray-NestedArrays.m
#import "NSArray-NestedArrays.h"

@implementation NSArray(NestedArrays)
- (id)nestedObjectAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger row = [indexPath row];
NSUInteger section = [indexPath section];
NSArray *subArray = [self objectAtIndex:section];

if (![subArray isKindOfClass:[NSArray class]])
return nil;

if (row >= [subArray count])
return nil;

return [subArray objectAtIndex:row];
}

@end



Aucun commentaire: