[OGo-Developer] stuffing an NSArray into a NSMutableDictionary
Rafel Amer Ramon
developer@opengroupware.org
Tue, 17 Apr 2007 12:57:42 +0200
En/na Sebastian Reitenbach ha escrit:
> Hi,
>
> I did not got it working as I wanted to work. I faked the array creation so
> that at least an array containing one object as I want it to be, is created.
>
> it is here in the last patch to this enhancement request:
> http://bugzilla.opengroupware.org/bugzilla/show_bug.cgi?id=1864
> in OGoAsteriskCommands.m in -getQueues:
>
> - (NSArray *)getQueues {
> NSException *exc;
> if ((exc = [self sendCommand:@"QueueStatus"
> withParameters:nil
> expectResult:[[[self asteriskCommands]
> objectForKey:@"QueueStatus"] objectForKey:@"ExpectedResult"]])) {
> ASSIGN(self->lastException, exc);
> return nil;
> }
> else {
> /* need to sort the output in multiple */
> NSEnumerator *e;
> NSMutableDictionary *queuesdict;
> NSMutableArray *membersarray;
> id event;
> queuesdict = [[NSMutableDictionary alloc] init];
> membersarray = [[NSMutableArray alloc] init];
> e = [self->multipleReturn objectEnumerator];
> while ((event = [e nextObject])) {
> if ([[event objectForKey:@"Event"] hasSuffix:@" QueueParams"]) {
> /* the queue description, their parameters */
> NSEnumerator *f;
> NSEnumerator *g;
> id line;
> id value;
>
> f = [event keyEnumerator];
> g = [event objectEnumerator];
> while ((line = [f nextObject]) && (value = [g nextObject])) {
> [queuesdict takeValue:value forKey:line];
> }
> } else {
> /* queue members */
> [membersarray addObject:event];
> }
> }
> [queuesdict takeValue:[membersarray copy] forKey:@"Agents"];
> NSMutableArray *tmparray;
> tmparray = [[NSMutableArray alloc] init];
> [tmparray addObject:queuesdict];
> [self->multipleReturn removeAllObjects];
> ASSIGN(self->multipleReturn, [tmparray copy]);;
> }
> return self->multipleReturn;
> }
>
>
> in the beginning of getQueues, the array self->multipleReturn is set via the
> [self sendCommand:@"QueueStatus" ...
>
> As the slf->multipleReturn contains an unordered list of objects, mixed up
> information about queues and their agents, I want to make it more ordered so
> that it looks like this:
>
> queues = (
> {
> queue = "queuename";
> servicelevel = "servicelevel";
> value = "key";
> Agents = (
> location = "101";
> blah = "plonk";
> );
> },
> {
> another queue...
> }
>
> )
>
> my initial plan was to enumerate over the self->multipleReturn array, stuff
> everything into a dictionary, and then put the dictionary into an array.
> NSMutableDictionary queuesdict;
> queuesdict = [[NSMutableDictionary alloc] init];
> e = [self->multipleReturn objectEnumerator];
> while ((event = [e nextObject])) {
> if ([[event objectForKey:@"Event"] hasSuffix:@" QueueParams"]) {
> /* the queue description, their parameters */
> [queuesdict addObject:event forKey:[event objectForKey:@"Queue"]];
> } else {
> /* queue members */
> [[queuesdict objectForKey:[event objectForKey:@"Queue"]
> objectForKey:@"Agents"] addObject:event];
> [membersarray addObject:event];
> }
> }
>
>
> but I am unable to get the Agents stuffed into the dictionary. I do not get
> error messages, nothing, it just does not add the Agents to the Dictionary.
> It seems I do not yet understand completely how Mutable dictionaries or
> arrays are supposed to work.
> Any more insights are highly appreciated.
>
> kind regards
> Sebastian
>
>
Sebastian,
can you send an example of the initial values of self->multipleReturn
and the desired final values?
Regards
R. Amer
Thecnical University of Catalonia
--
Aquest missatge ha estat analitzat per MailScanner
a la cerca de virus i d'altres continguts perillosos,
i es considera que està net.
For all your IT requirements visit: http://www.transtec.co.uk