[iOS] XML parser

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Kevv1990
  • Registratie: Oktober 2011
  • Laatst online: 15-06-2022
Beste Tweakers leden,

Omdat mijn vorige topic gesloten werd omdat het teveel leek op een script request en ik nu wél dingen geprobeerd heb, hier een nieuw topic!

Ik ben dus bezig met een iPhone app. De bedoeling van de app is om op 2 tabbladen 2 verschillende XML-bestanden op te halen en in een tabel weer te geven, waarop de gebruiker op een cell kan klikken om het gehele bericht te lezen. Nu heb ik, na wederom een tijdje zoeken, een tutorial gevonden (http://cocoadevblog.com/i...reating-a-rss-feed-reader).

Deze heb ik helemaal gevolgd. Met de link naar de RSS-feed van het voorbeeld, werkt het zoals het hoort. Alleen nu mijn probleem: Zodra ik mijn eigen xml-bestand (die ik voor het gemak ook op Feedburner heb gezet) gebruik, en de app opstart, krijg ik een error: Thread 1: Program received signal: "SIGABRT" op deze code:
C:
1
2
3
4
5
6
7
int main(int argc, char *argv[]) {
    
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}


In het output venster komt daarnaast deze melding:
2011-11-01 21:10:48.588 RssReader[7606:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary setObject:forKey:]: attempt to insert nil value (key: date)'
*** First throw call stack:
(0x14d1052 0x11bcd0a 0x1479a78 0x14799e9 0x14d030a 0x330f 0xeba35 0x12ae8f6 0x12baab0 0xea02d 0x2e65 0x110a59 0x10ee94 0x10feb7 0x10ee4f 0x10efd5 0x53f6a 0x166fbbd 0x173c5ea 0x1666298 0x173c16b 0x1666137 0x14a597f 0x1408b73 0x1408454 0x1407db4 0x1407ccb 0x1bc6879 0x1bc693e 0x36aa9b 0x1d3d 0x1cb5 0x1)
terminate called throwing an exceptionCurrent language: auto; currently objective-c
Helaas is mijn kennis van Cocoa/C helemaal niet goed (Ooit wel eens C# gehad op school, maar dat is compleet vervaagd) en heb niet de kennis om dit zo 1-2-3 zelf op te lossen. Er lijkt ergens een verkeerde waarde uit te komen, maar ik heb geen flauw idee waar en waarom.

Kortom, als ik de tutorial helemaal uitwerk met de rss-feed uit het voorbeeld, werkt het. Zodra ik mijn eigen rss-feed erin zet, werkt het niet meer en krijg ik een error. De RSS-feed heeft in principe dezelfde opmaak. Het enige wat verschilt is dat er in mijn rss binnen de <content> tags een afbeelding staat.
Mijn vraag aan jullie of jullie een idee hebben hoe deze foutmelding tot stand komt? Ligt het misschien aan het feit dat er een afbeelding in de <content> staat?

PS: Als ik code van de class parser en m`n RootViewController moet posten, hoor ik dat graag.

Acties:
  • 0 Henk 'm!

  • dev10
  • Registratie: April 2005
  • Laatst online: 09-09 15:21
Wat denk je wat de melding 'reason: '-[__NSCFDictionary setObject:forKey:]: attempt to insert nil value (key: date)' betekent?

Waarschijnlijk haal je ergens een XML bestand op en wil je dit in een dictionary zetten, maar krijg je geen goed XML bestand terug. Die foutmelding krijg je dus niet op het stukje code wat je hier weergeeft, maar op je controller die de XML in een dictionary zet. Dit kan ik helaas niet controleren, want m'n glazen bol is gesloopt.

Tip: volg een basiscursusje Objective-C. (http://developer.apple.co...ual/OOP_ObjC/OOP_ObjC.pdf)

[ Voor 20% gewijzigd door dev10 op 01-11-2011 21:30 ]


Acties:
  • 0 Henk 'm!

  • mymind*
  • Registratie: Juni 2000
  • Laatst online: 10-09 22:15

mymind*

A Beautiful Mind

Misschien heb je hier nog iets aan: http://blog.emmerinc.be/i...ak-on-exception-in-xcode/
Ik heb het zelf nog niet geprobeerd, maar mogelijk kun je hiermee de exacte locatie van de exception achterhalen.

Acties:
  • 0 Henk 'm!

  • Kevv1990
  • Registratie: Oktober 2011
  • Laatst online: 15-06-2022
dev10 schreef op dinsdag 01 november 2011 @ 21:28:
Wat denk je wat de melding 'reason: '-[__NSCFDictionary setObject:forKey:]: attempt to insert nil value (key: date)' betekent?

Waarschijnlijk haal je ergens een XML bestand op en wil je dit in een dictionary zetten, maar krijg je geen goed XML bestand terug. Die foutmelding krijg je dus niet op het stukje code wat je hier weergeeft, maar op je controller die de XML in een dictionary zet. Dit kan ik helaas niet controleren, want m'n glazen bol is gesloopt.

Tip: volg een basiscursusje Objective-C. (http://developer.apple.co...ual/OOP_ObjC/OOP_ObjC.pdf)
Dat zou kunnen kloppen inderdaad. Betekent dit dan dat er ergens code wordt gevonden die niet door de parser heen komt?
Mijn xml-bestand heeft exact dezelfde tags als in het voorbeeld:
<title>, <pubDate>, <description> en <content>.

Acties:
  • 0 Henk 'm!

  • Xanion
  • Registratie: Augustus 2001
  • Laatst online: 12-03 21:20
Zonder je code waarin we kunnen zien wat je doet gaan we het probleem niet vinden ben ik bang.

There are 10 types of people in the world: Those who understand binary, and those who don't. .


Acties:
  • 0 Henk 'm!

  • Kevv1990
  • Registratie: Oktober 2011
  • Laatst online: 15-06-2022
Parser.m:
C:
1
*snip*


RootViewController.m:
C:
1
*snip*


Niet echt bepaald overzichtelijk zo, maar geen idee hoe anders te doen (spoiler tags werken hier anders dan op andere fora)

[ Voor 94% gewijzigd door RobIII op 01-11-2011 22:50 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ja doei;

[list=1]
• Allereerst staan die 210(!!) regels code ook op de pagina waar je naar verwijst; als je kant-en-klare code gaat copy/pasten mag je voor support bij die auteur aankloppen; we doen niet aan support op code van derden. (Plaats gerust eigen snippets code, maar kom niet aanzetten met andermans werk; al helemaal niet als je geen idee hebt wat 't doet)
• Als je code plaatst; plaats dan enkel relevante delen; maw: ga uitsluiten waar 't probleem wel danwel niet in zit en plaats enkel de paar (lees: hooguit een 20~40) regels relevante(!) code)
• Debuggen kun je prima zélf; Debuggen: Hoe doe ik dat?
• De foutmelding is, en dan ken ik geen letter cocoa noch iPhone development, zo klaar als een klontje.


Misschien is het handig om, als je aan 't ontwikkelen bent, ook eens te proberen te begrijpen wat bepaalde code doet i.p.v. blind copy/pasten en dan verbaasd zijn als 't niet werkt. Als je begrijpt wat er gebeurt (en waarom) dan moet 't geen rocket science zijn om uit te vogelen waar 't probleem (ongeveer) zit en zo "in te zoomen" op 't pijnpunt. Daar ga je je dan op concentreren en vervolgens proberen een oplossing voor te vinden. 210 Regels code dumpen met een foutmelding en anderen 't voor je laten oplossen zal je niet wijzer maken en de eerstvolgende keer dat je tegen een probleem aan loopt ben je weer op derden aangewezen.
Give a man a fish and feed him for a day. Teach a man how to fish and feed him for a lifetime.
Wat dev10 ook al zeg: je probeert een nil (e.g. null) key in een dictionary te proppen en daar is de dictionary niet blij mee. Als je weet wat een dictionary is dan begrijp je dat dat wel eens heel goed logisch kan zijn.

Hint: het probleem zal, gok ik, rond regel 91 liggen (ctrl-f op forKey:@"date")

[ Voor 20% gewijzigd door RobIII op 01-11-2011 23:04 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

De parser lukt het niet je XML bestand te parsen. Hij geeft een nil value terug, die probeer je in een dictionary te stoppen. En dat mag niet.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
En ik zou ook eens beginnen gewoon de comments op die pagina te lezen; daar staat 't gewoon in for pete's sake. De *kuch* "oplossing" *kuch* die daar beschreven wordt is zo mogelijk nog knulliger dan het probleem zelf maar het moet je in ieder geval in de juiste richting wijzen. Een fatsoenlijke oplossing schud je vervolgens zo uit je mouw als je, i.t.t. de copy/pasters daar, even probeert te doorgronden wat de code doet.

[ Voor 50% gewijzigd door RobIII op 01-11-2011 23:17 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Kevv1990
  • Registratie: Oktober 2011
  • Laatst online: 15-06-2022
RobIII schreef op dinsdag 01 november 2011 @ 23:05:
En ik zou ook eens beginnen gewoon de comments op die pagina te lezen; daar staat 't gewoon in for pete's sake. De *kuch* "oplossing" *kuch* die daar beschreven wordt is zo mogelijk nog knulliger dan het probleem zelf maar het moet je in ieder geval in de juiste richting wijzen. Een fatsoenlijke oplossing schud je vervolgens zo uit je mouw als je, i.t.t. de copy/pasters daar, even probeert te doorgronden wat de code doet.
Ik heb vanmiddag de comments wel zitten lezen, maar kennelijk heb ik hier echt overheen gelezen 8)7 8)7
Dit was inderdaad wel de oplossing. Ik ben je daarvoor echt heel erg dankbaar, ook al had ik hem gewoon zelf moeten kunnen vinden a.d.h.v die comments!
Pagina: 1