1

I am developing an app that streams radio stations to the app. The radio station names and links are stored in a XML file that looks like the following:

<radiostacionet>
<radio>
<emri>Radio Gurbeti</emri>
<frekuenca>N/A</frekuenca>
<linku>http://192.184.9.79:8218</linku>
<image>
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radiogurbeti.png
</image>
<dateandtime>
<day>27</day>
<month>09</month>
<year>2013</year>
<hour>13</hour>
<min>43</min>
<sec>00</sec>
</dateandtime>
<website>http://www.radiogurbeti.com/</website>
</radio>
<radio>
<emri>Radio STAR</emri>
<frekuenca>96.4 FM</frekuenca>
<linku>http://radio.1dhe1.com:9400</linku>
<image>
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radiostargjilani.png
</image>
<dateandtime>
<day>27</day>
<month>09</month>
<year>2013</year>
<hour>13</hour>
<min>42</min>
<sec>02</sec>
</dateandtime>
<website>http://www.radiostargjilan.com/</website>
</radio>
<radio>
<emri>Radio VALA RINORE</emri>
<frekuenca>94.7 Fm</frekuenca>
<linku>http://84.22.46.10:8000/</linku>
<image>
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radiovalarinore.png
</image>
<dateandtime>
<day>27</day>
<month>09</month>
<year>2013</year>
<hour>13</hour>
<min>41</min>
<sec>07</sec>
</dateandtime>
<website>http://www.valarinore.net/</website>
</radio>
<radio>
<emri>Radio Islame</emri>
<frekuenca>N/A</frekuenca>
<linku>http://server5.digital-webstream.de:33725</linku>
<image>
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radioislame.png
</image>
<dateandtime>
<day>27</day>
<month>09</month>
<year>2013</year>
<hour>13</hour>
<min>35</min>
<sec>13</sec>
</dateandtime>
<website>http://www.radiovizioni.net/</website>
</radio>
<radio>
<emri>Radio Vizioni</emri>
<frekuenca>88.1 FM</frekuenca>
<linku>http://www.vera-ks.com:9222/</linku>
<image>
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radiovizioni.png
</image>
<dateandtime>
<day>27</day>
<month>09</month>
<year>2013</year>
<hour>13</hour>
<min>34</min>
<sec>35</sec>
</dateandtime>
<website>http://www.radiovizioni.net/</website>
</radio>
<radio>
<emri>Radio Zëri Mitrovices</emri>
<frekuenca>N/A</frekuenca>
<linku>http://209.105.250.73:8202/</linku>
<image>
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radiomitrovica.png
</image>
<dateandtime>
<day>27</day>
<month>09</month>
<year>2013</year>
<hour>13</hour>
<min>33</min>
<sec>40</sec>
</dateandtime>
<website>http://radiomitrovica.eu/</website>
</radio>
<radio>
<emri>Radio Ferizaj</emri>
<frekuenca>N/A</frekuenca>
<linku>http://87.106.23.138:2012</linku>
<image>
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radioferiziaj.png
</image>
<dateandtime>
<day>27</day>
<month>09</month>
<year>2013</year>
<hour>13</hour>
<min>32</min>
<sec>52</sec>
</dateandtime>
<website>http://www.radioferizaji.net/</website>
</radio>
<radio>
<emri>Radio Gjakova</emri>
<frekuenca>N/A</frekuenca>
<linku>http://82.114.80.202:8000/</linku>
<image>
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radiogjakova.png
</image>
<dateandtime>
<day>27</day>
<month>09</month>
<year>2013</year>
<hour>13</hour>
<min>31</min>
<sec>45</sec>
</dateandtime>
<website>http://www.radiogjakova.info/</website>
</radio>
<radio>
<emri>Radio Marimanga</emri>
<frekuenca>N/A</frekuenca>
<linku>http://91.82.85.71:9084/</linku>
<image>
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radiomarimanga.png
</image>
<dateandtime>
<day>27</day>
<month>09</month>
<year>2013</year>
<hour>13</hour>
<min>30</min>
<sec>59</sec>
</dateandtime>
<website>http://www.radiomarimanga.com/</website>
</radio>
<radio>
<emri>Radio Kosova e Lire</emri>
<frekuenca>N/A</frekuenca>
<linku>http://www.radiokosovaelire.com/</linku>
<image>
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radiokosovaelire.png
</image>
<dateandtime>
<day>27</day>
<month>09</month>
<year>2013</year>
<hour>13</hour>
<min>30</min>
<sec>05</sec>
</dateandtime>
<website>http://www.radiokosovaelire.com/</website>
</radio>
<radio>
<emri>Radio Love</emri>
<frekuenca>N/A</frekuenca>
<linku>http://91.121.23.6:8030</linku>
<image>
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radiolove.png
</image>
<dateandtime>
<day>27</day>
<month>09</month>
<year>2013</year>
<hour>13</hour>
<min>29</min>
<sec>34</sec>
</dateandtime>
<website>http://dukagjini.com</website>
</radio>
<radio>
<emri>Radio Shqip</emri>
<frekuenca>N/A</frekuenca>
<linku>http://91.121.23.6:8020</linku>
<image>
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radioshqip.png
</image>
<dateandtime>
<day>27</day>
<month>09</month>
<year>2013</year>
<hour>13</hour>
<min>29</min>
<sec>12</sec>
</dateandtime>
<website>http://dukagjini.com</website>
</radio>
<radio>
<emri>Radio HIT</emri>
<frekuenca>N/A</frekuenca>
<linku>http://91.121.23.6:8010</linku>
<image>
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radiohit.png
</image>
<dateandtime>
<day>27</day>
<month>09</month>
<year>2013</year>
<hour>13</hour>
<min>27</min>
<sec>56</sec>
</dateandtime>
<website>http://dukagjini.com</website>
</radio>
<radio>
<emri>Radio Kosova</emri>
<frekuenca>99.99</frekuenca>
<linku>http://stream2.rtkit.com:8088</linku>
<image>
http://localhost/Apps/An/Shqipcom/data/source/img/radio/3_rating_not_important.png
</image>
<dateandtime>
<day>27</day>
<month>09</month>
<year>2013</year>
<hour>10</hour>
<min>48</min>
<sec>34</sec>
</dateandtime>
<website>rtklive.com</website>
</radio>
<radio>
<emri>Radio dukagjini</emri>
<frekuenca>99.6</frekuenca>
<linku>http://s1.voscast.com:8226</linku>
<image>
http://localhost/Apps/An/Shqipcom/data/source/img/radio/3_rating_important.png
</image>
<dateandtime>
<day>26</day>
<month>09</month>
<year>2013</year>
<hour>16</hour>
<min>52</min>
<sec>01</sec>
</dateandtime>
<website>google.com</website>
</radio>
<radio>
<emri>Radio Bluesky</emri>
<frekuenca>101.2</frekuenca>
<linku>http://stream2.rtkit.com:8098</linku>
<image>
http://localhost/Apps/An/Shqipcom/data/source/img/radio/cio_feed_logo.png
</image>
<dateandtime>
<day>26</day>
<month>09</month>
<year>2013</year>
<hour>11</hour>
<min>25</min>
<sec>22</sec>
</dateandtime>
<website>example.com</website>
</radio>
</radiostacionet>

I am using NSXMLParser to parse the XML and I want to extract the name and link from the document (emri and linku).

In my RadioViewController.h file I declared the following variables:

@interface RadioViewController : UIViewController <NSXMLParserDelegate>

{
    NSMutableArray *_idName;
    NSMutableArray *_idLink;
    BOOL isRadio;
}

In the RadioViewConrtoller.m file i wrote the following code:

- (void)viewDidLoad
{
    [super viewDidLoad];

    _idName = [[NSMutableArray alloc] init];
    _idLink = [[NSMutableArray alloc] init];

    NSURL *URL = [NSURL URLWithString:@"my_link"];
    NSXMLParser * parser = [[NSXMLParser alloc] initWithContentsOfURL:URL];
    [parser setDelegate:self];
    [parser parse];
}

An finally the parser methods:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{

    if ([elementName isEqualToString:@"radio"]) {
        isRadio = YES;
    }
    else if ([elementName isEqualToString:@"radio"] && isRadio){
        NSString *idString = [attributeDict objectForKey:@"emri"];
        NSString *isbnString = [attributeDict objectForKey:@"linku"];
        [_idName addObject:idString];
        [_idLink addObject:isbnString];
        NSLog(@"Radio id is: %@ and Link is: %@",idString,isbnString);
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

    if ([elementName isEqualToString:@"emri"]) {
        isRadio=NO;
        NSLog(@"Id Array count is :%d",[_idName count]);
    }
}

No the problem is when I run the application i get the following log message: enter image description here

Any help would be greatly appreciated because i can't see what i might be doing wrong here.

Thanks a lot.

Granit

1
  • Debugging is not a rocket-science. Sometimes (if not all the time) it saves your life. Debug your code and you will see what's going wrong. Your if-statement is wrong. No chance to reach else part Commented Sep 30, 2013 at 8:46

2 Answers 2

3

Typo!

if ([elementName isEqualToString:@"radio"] && isRadio){

Should be:

if ([elementName isEqualToString:@"emri"] && isRadio){
//                                 ^^^^

Also isRadio should really be inRadio, to be more descriptive.

Sign up to request clarification or add additional context in comments.

5 Comments

lesson for the OP: Naming is your friend! ALSO always use constants for names!
After i changed "radio" to "emri" the app crashes with this error:2013-09-30 10:45:31.867 ShqipCom[714:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'
@Grangji That's because the linku tag won't have been seen by the parser yet. You'll need to move processing of that tag into it's own "section" of code.
@trojanfoe Sorry to bother with basic stuff, this is my first project i'm working on. I moved the linku tag in a separate section but i get the same error. Here's the code link
@Grangji OK, I've not ever used NSXMLParser but it's clear that delegate method only provides the tag attributes not its element value. You need to be hooking foundCharacters: to get the element data: developer.apple.com/library/mac/documentation/cocoa/Conceptual/…
0

In your code, the else if condition in the didStartElement method will not be executed.because already you checking element name is radio in if condition. So your else if condition holds the non-radio elements. So the objects are not adding to the array. Change the code as like

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{

    if ([elementName isEqualToString:@"radio"] && isRadio) {
        NSString *idString = [attributeDict objectForKey:@"emri"];
        NSString *isbnString = [attributeDict objectForKey:@"linku"];
        [_idName addObject:idString];
        [_idLink addObject:isbnString];
        NSLog(@"Radio id is: %@ and Link is: %@",idString,isbnString);

    }
    else if ([elementName isEqualToString:@"radio"] && !isRadio){
       isRadio = YES;
    }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.