Geen toegang tot NSDictionary

Ik heb een JSON gemaakt met behulp van een PHP-script. Ik lees de JSON en kan zien dat de gegevens correct zijn gelezen. Nochtans, als het gaat om toegang tot de objecten krijg ik niet-herkende selector verzonden naar instantie ...

Kan niet lijken te vinden waarom dat na te veel uren is. Alle hulp zou geweldig zijn!

Mijn code ziet er zo uit:

NSDictionary *json = [[NSDictionary alloc] init];
json = [NSJSONSerialization JSONObjectWithData:receivedData options:kNilOptions error:&error];

NSLog(@"raw json = %@,%@",json,error);  

NSMutableArray *name = [[NSMutableArray alloc] init];

[name addObjectsFromArray: [json objectForKey:@"name"]];

De code loopt vast bij het bereiken van de laatste regel hierboven.

De uitvoer als volgt:

raw json = (
        {
        category = vacancies;
        link = "http://blablabla.com";
        name = "name 111111";
        tagline = "tagline 111111";
    },
        {
        category = vacancies;
        link = "http://blobloblo.com";
        name = "name 222222222";
        tagline = "tagline 222222222";
    }
),(null)
2012-06-23 21:46:57.539 Wind expert[4302:15203] -[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0xdcfb970

HELPEN !!!

0
Ter info: uw eerste regel code leidt tot een lek, tenzij u ARC gebruikt. Hoe dan ook, het is een onnodige toewijzing.
toegevoegd de auteur gschandler, de bron

2 antwoord

json is an array from what you've shown, not a dictionary. I can tell this because of the parentheses surrounding the whole of the log output for json. Inside the array are dictionaries, which I can tell by the fact that they are surrounded by braces.

Dus het lijkt erop dat je zoiets als dit wilt:

NSError *error = nil;
NSArray *json = [NSJSONSerialization JSONObjectWithData:receivedData options:kNilOptions error:&error];

NSLog(@"raw json = %@,%@",json,error);  

NSMutableArray *name = [[NSMutableArray alloc] init];
for (NSDictionary *obj in json) {
    [name addObject:[obj objectForKey:@"name"]];
}

Terzijde merk je dat ik de onnodige initialisatie van json heb verwijderd naar een object voordat ik in de volgende regel overschreef met JSONObjectWithData: options: error: . In een ARC-wereld zou het geen lek zijn, maar het is nog steeds volstrekt onnodig om een ​​object toe te wijzen om er even later vanaf te komen. Ook heb ik in de regel NSError * error = nil; toegevoegd omdat dat er niet was en het duidelijk noodzakelijk was om te compileren.

2
toegevoegd
@michaelblaize blij dat het het voor je heeft opgelost. Ik zie dat je nieuw bent - dus ik zal erop wijzen dat het idee is om te accepteren door op het vinkje links van het antwoord te klikken dat jij als de juiste beschouwt.
toegevoegd de auteur mattjgalloway, de bron
Heel erg bedankt. Dat loste het probleem op.
toegevoegd de auteur michael blaize, de bron

Het probleem lijkt te zijn dat het hoofdniveau van uw JSON een array is, geen woordenboek (let op de haakjes in plaats van accolades als het eerste teken in de gelogde uitvoer). Arrays hebben geen objectForKey selector. Misschien bent u van plan om eerst objectAtIndex: 0 te nemen, of anders over alle items te itereren?

Terzijde, de eerste regel van je code maakt een volledig verspilde initialisatie van een NSDictionary. Het wordt simpelweg overschreven en op de eerstvolgende regel ongedaan gemaakt.

1
toegevoegd
Het is inderdaad geen lek in een ARC-project, dat is wat we tegenwoordig op een canonieke manier zouden moeten bespreken.
toegevoegd de auteur mattjgalloway, de bron
@ H2CO3 Is dat eigenlijk een geheugenlek in een ARC-project?
toegevoegd de auteur Chris Trahey, de bron
Bedankt, @mattjgalloway Ik heb de bewerking teruggedraaid.
toegevoegd de auteur Chris Trahey, de bron