Hoe het aantal objecten in elk NSDictionary-object binnen een NSArray te bepalen

Er is waarschijnlijk een eenvoudig antwoord, maar ik kan er geen vinden.

Ik heb een NSArray, gevuld met objecten van NSDictionary. Het aantal objecten/2 binnen elk object NSDictionary bepaalt het aantal rijen in elke sectie van een UITableviewcell. Evenzo bepaalt het aantal NSDictionary-objecten het aantal secties - (dat is gewoon [NSArray-telling]).

Een eenvoudig voorbeeld:

self.myArray = [NSArray arrayWithObects:
[NSDictionary dictionaryWithObjectsAndKeys:obj1, key1, obj2, key2,..., nil],
...
[NSDictionary dictionaryWithObjectsAndKeys:objA, keyA ... objn, keyn, nil],
nil];

Wat ik heb gedaan is het handmatig tellen van het aantal objecten in elke NSDictionary, waarbij elk getal door 2 wordt gedeeld en die informatie wordt gebruikt om een ​​array te construeren waarbij elk element het aantal rijen per sectie bevat. Die handmatig geconstrueerde array wordt vervolgens gebruikt in de viewer voor tableview numberOfRowsInSection. Dit lijkt op zijn best ruw. Overigens, maar niet belangrijk, de reden waarom ik deel met 2 is dat elke tableview-cel is samengesteld met 2 UIlabel-subweergaven - 1 label voor obj ..., de ander voor sleutel ..., voor elke set NSDictionary-objecten in.

Bij voorbaat hartelijk dank.

0

2 antwoord

@implementation NSArray (totalObjects)

- (NSUInteger) totalObjects
{
NSUInteger result = 0;
for (id object in self)
 result += [object isKindOfClass:[NSDictionary class]] ? [[object allKeys] count] : 1;
return result;
}

@end
1
toegevoegd
Bedankt NSResonder, echter, uw oplossing toepassen als een eigenschap van myArray, geeft me een telling van ALLE sleutelparen in de array en niet indexeren op index. Hoe dan ook, voor de goede orde vond ik een eenvoudige oplossing voor het probleem: NSInteger i = [[myArray objectAtIndex: index] count];
toegevoegd de auteur fundtimer, de bron

Gebruik de functie count op NSArray en NSDictionary :

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSDictionary *dictionary = [myArray objectAtIndex:section];
    return [dictionary count]/2;
}
1
toegevoegd
Ter informatie, ongeacht het aantal paren objecten in een bepaald woordenboek, is de code altijd 2/2 of 1 geretourneerd.
toegevoegd de auteur fundtimer, de bron