Lezen van een plist

Ik probeer te leren lezen van een plist ... de mijne is een eenvoudige zaak. Ik wil eigenlijk gewoon één integer lezen, hoewel ik voor een meer algemeen geval van gegevens ook raad zou waarderen. De plist heeft Item0 - Array en onder dat item 0 een cijfer. Dit is hoe ik dit probeer te lezen.

plistArray = [[NSArray alloc] initWithContentsOfURL:[NSURL      URLWithString:@"http://www.website.com/count.plist"]];


//count = [[plistArray objectAtIndex:0]];
count=(int)[plistArray objectAtIndex:0];
NSLog(@"array %@\n",plistArray);

NSLog(@"count %i\n",count);

Dit is de plist xml:

<?xml version="1.0" encoding="UTF-8"?> 

; 
     
        Item0 
         
            12 
         
     

0
zoals het is ... het aantal is nul en de array is nul in het logboek.
toegevoegd de auteur Cherr Skees, de bron
<? xml version = "1.0" encoding = "UTF-8"?> apple.com/DTDs/PropertyList-1.0.dtd "& gt ; Item0 12
toegevoegd de auteur Cherr Skees, de bron
De URL wordt prima afgedrukt ... dus zoals je zei, het moet iets zijn met hoe ik de plist behandel. Ik heb het hierboven geplakt ... het ziet er nogal rommelig uit, maar er is niet veel aan. Bedankt voor de hulp.
toegevoegd de auteur Cherr Skees, de bron
Als de array nihil afdrukt, is de URL slecht of is het plist-formaat verkeerd. Maak de NSURL in een aparte regel (bijvoorbeeld NSURL * url = [NSURL URLWithString ... ) vóór de regel NSArray alloc en kijk of url komt nihil uit of niet. Als de URL goed is, plaats dan de plist xml. NSArrays bevatten ook objecten, dus de toewijzing aantal klopt niet (int is een primitief type). Als het eerste item een ​​geheel getal is, zou het als een NSNumber-object zijn, dus zou u count = [(NSNumber *) [plistArray objectAtIndex: 0] intValue]; moeten doen.
toegevoegd de auteur Anna, de bron

3 antwoord

Ik weet niet zeker hoe je de plist creëert, maar ik denk dat je een NSDictionary bewaart en geen NSArray.

De structuur van de gegevens in de plist laat zien dat het root-object een woordenboek (dict) is, dat één sleutel/waarde-paar bevat. De sleutel is "Item0" en de waarde is de NSArray die ik denk dat je zoekt.

Probeer dit:

plistDict = [[NSDictionary alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://www.website.com/count.plist"]];
NSArray * plistArray = [plistDict objectForKey:@"Item0"];
NSLog(@"array %@", plistArray);
1
toegevoegd
Bedankt voor de hulp...
toegevoegd de auteur Cherr Skees, de bron

Er zijn twee problemen met de plist:

  • the ; in front of the tag should not be there
  • the array you're trying to read in your code is inside a dictionary in the plist (the array is not the outermost element)

Verwijder eerst de puntkomma.

Next, either update the plist to contain only the element or update the code to first read the and then take the NSArray from the dictionary:

NSDictionary *plistDict = [NSDictionary dictionaryWithContentsOfURL:url];

NSArray *plistArray = [plistDict objectForKey:@"Item0"];

int count = [(NSNumber *)[plistArray objectAtIndex:0] intValue];
1
toegevoegd

Uw plist heeft een woordenboek als het root-object, niet een array. U zou een NSDictionary moeten maken met de inhoud van de URL, deze zal dan een array bevatten (voor sleutel Item0) en het eerste object van deze array zal uw NSNumber zijn met het gehele getal.

1
toegevoegd