Het probleem van de veranderende NSString
Ik heb een xml met deze opbouw:
<category name="Carhifi"> <subcat code="AC-ACCESS">Accesoires</subcat> <subcat code="AC-HEADUN">Autoradio</subcat> <subcat code="AC-NAVIGA">Portable Navigatie</subcat> </category> Dan heb ik een object filteritem met een string en een mutable array: @interface FilterItem : NSObject { NSString *categorie; NSMutableArray *subcat; } Via een xmlcontroller (nsxmlparser) vul ik die string en array. Maar als ik die later wil uitlezen, dan is op een of andere vage reden (af en toe) het laatste object in de array veranderd van een nsstring naar een calayer. Dit zorgt voor een crash als ik dit wil uitputten als string. Heel begrijpelijk dat hij crash, maar waarom het opeens geen string meer is?? Iemand een ideetje die me op de goede weg kan helpen? XMLFilterController.h Code:
#import <Foundation/Foundation.h> Code:
#import "XMLFilterController.h" Code:
#import <Foundation/Foundation.h> Code:
#import "FilterItem.h" filterArray = [[xmlcontr1 loadXMLByURL:url1] items]; en vul ik mijn array met subcategorieen subArray = [[filterArray objectAtIndex:selectedCat] subcat]; Als ik die subarray wil outputten, dan gaat het mis. |
currentNodeContent = [NSMutableString string];
die een retain geven, of autorelease zetten. Je releaset hem namelijk zelf in DidEndElement. |
Whacko held!!! Dat was dé oplossing!!!
Echt, anderhalve dag aan het zoeken geweest en daar had ik simpelweg niet aan gedacht. Wie had gedacht dat het zo simpel kon zijn. Ik zat me echt blind te staren.. |
You are welcome :)
|
Volgens mij had je hier op de volgende manier achter kunnen komen:
1) Doe Appeltje-I op je App in 'Executables' 2) Ga naar de tab 'Arguments' 3) Voeg onderin toe: NSZombieEnabled en NSDebugEnabled, beide met value 'YES' 4) Als je vage resultaten krijgt zet je het vinkje voor deze twee aan en draai je je Applicatie nog een keer. Als je nu een al gereleased object benaderd krijg je een foutmelding: "Message sent to deallocated instance." |
Bedankt voor de tip Wubbe. Ik zal het eens proberen van de week.
|
Let wel op dat je het vinkje bij 'gewoon' werken weer uit zet. De grap is dat iedere nil-pointer wijst naar zo'n Zombie object. Dat betekent wel dat:
Code:
if (!object) { |
Alle tijden zijn GMT +2. Het is nu 04:06. |