objective c - NSMutableArray error, keep saying error out of bounds -
i cant see forest through trees say. first off, here code :
-(nsmutablearray*)getwaranty:(nsstring*)string start:(nsstring*)start and:(nsstring*)end{ nsmutablearray *waranties = [[nsmutablearray alloc] init]; nsrange startrange = [string rangeofstring:start]; nsrange valuerange; valuerange.location = startrange.location + startrange.length; //beginpunt nsrange eindrange = [string rangeofstring:end]; valuerange.length = eindrange.location - valuerange.location; nsstring *result = [[nsstring alloc]init]; result = nil; if(valuerange.location != nsnotfound){ if(valuerange.length != nsnotfound){ result = [string substringwithrange:valuerange]; nsstring *testresult = [[nsstring alloc]init]; testresult = result; nsstring* begintrim = [[nsstring alloc]init]; nsstring* begintrim1 = [[nsstring alloc]init]; nsstring* begintrim2 = [[nsstring alloc]init]; nsstring* begintrim3 = [[nsstring alloc]init]; nsstring* begintrim4 = [[nsstring alloc]init]; nsstring* begintrim5 = [[nsstring alloc]init]; nsstring* begintrim6 = [[nsstring alloc]init]; nsstring* begintrim7 = [[nsstring alloc]init]; nsstring* begintrim8 = [[nsstring alloc]init]; nsstring* begintrim9 = [[nsstring alloc]init]; nsstring* begintrim10 = [[nsstring alloc]init]; begintrim = [testresult stringbyreplacingoccurrencesofstring:@"<li class=\"toptwowarrantylistitem\">"withstring:@""]; begintrim1 = [begintrim stringbyreplacingoccurrencesofstring:@"<b>"withstring:@""]; begintrim2 = [begintrim1 stringbyreplacingoccurrencesofstring:@"<li>"withstring:@""]; begintrim3 = [begintrim2 stringbyreplacingoccurrencesofstring:@"</li>"withstring:@""]; begintrim4 = [begintrim3 stringbyreplacingoccurrencesofstring:@"</b>"withstring:@""]; begintrim5 = [begintrim4 stringbyreplacingoccurrencesofstring:@"<a href=\"javascript:selecttabfromlink(5);\" id=\"seewarrantytab\" class=\"uif_link\">"withstring:@""]; begintrim6 = [begintrim5 stringbyreplacingoccurrencesofstring:@"</a>"withstring:@""]; nsstring *lang =[[nsstring alloc]init]; lang= @"nl"; if(lang == @"nl"){ begintrim7 = [begintrim6 stringbyreplacingoccurrencesofstring:@". raadpleeg het tabblad garantie voor meer informatie."withstring:@""]; } begintrim8 = [begintrim7 stringbyreplacingoccurrencesofstring:@"</div>"withstring:@""]; begintrim9 = [begintrim8 stringbyreplacingoccurrencesofstring:@"\r\n"withstring:@""]; begintrim10 = [begintrim9 stringbytrimmingcharactersinset:[nscharacterset whitespaceandnewlinecharacterset]]; nsstring *warant = [[nsstring alloc]init]; nsstring *thewarant = [[nsstring alloc]init]; nsstring *hoev = [[nsstring alloc]init]; nsstring *lic = [[nsstring alloc]init]; nsstring *datum = [[nsstring alloc]init]; if(lang == @"nl"){ //split met garantie warant = [begintrim10 stringbyreplacingoccurrencesofstring:@" garantie met einddatum op"withstring:@""]; nsarray *array = [[nsarray alloc]init]; array = [warant componentsseparatedbystring:@" "]; nsinteger hoeveel = [array count]; if(hoeveel != 0){ hoev = [nsstring stringwithformat:@"%d",hoeveel]; [waranties addobject:hoev]; for(int = 0; < hoeveel; i++){ if([array objectatindex:i] != null){ thewarant = [array objectatindex:i]; nsarray *specarray = [[nsarray alloc]init]; specarray = [thewarant componentsseparatedbystring:@" "]; lic = [specarray objectatindex:0]; datum = [specarray objectatindex:1]; [waranties addobject:lic]; [waranties addobject:datum]; nslog(@" de waraiens 1 :%@", [waranties objectatindex:0]); nslog(@" de waraiens 1 :%@", [waranties objectatindex:1]); } else{ } } nslog(@" de waraiens 1 :%@", [waranties objectatindex:0]); nslog(@" de waraiens 2 :%@", [waranties objectatindex:1]); nslog(@" de waraiens 3 :%@", [waranties objectatindex:2]); nslog(@" de waraiens 4 :%@", [waranties objectatindex:3]); nslog(@" de waraiens 5 :%@", [waranties objectatindex:4]); return waranties; } } } }
}
the code should return somthing :
2013-03-12 21:12:51.783 dellsupportapp[6254:c07] de waraiens 1 :2
2013-03-12 21:12:51.785 dellsupportapp[6254:c07] de waraiens 2 :dell business support/prosupport
2013-03-12 21:12:51.785 dellsupportapp[6254:c07] de waraiens 3 :30/07/2009
2013-03-12 21:12:51.785 dellsupportapp[6254:c07] de waraiens 4 :next business day
2013-03-12 21:12:51.786 dellsupportapp[6254:c07] de waraiens 5 :30/07/2009
but tricky thing is. works 1 out of 10 times... method called in function :
-(nsmutablearray*) parseit: (nsstring*) topars { nsmutablearray *waranties = [[nsmutablearray alloc]init]; nsstring *begintitle = @"<title>"; nsstring *eindtitle = @"</title>"; nsstring *title = [self gettitle:topars start:begintitle and:eindtitle]; if(title != null){ nslog(@"de title = %@", title); [waranties addobject:title]; nsstring *try = [waranties objectatindex:0]; nslog(@"de title = %@", try); } nsstring *beginwar = @"<div class=\"toptwowarrantysummarydiv\">"; nsstring *eindwar = @"<div class=\"requestwarrantyextensiondiv\">"; nsmutablearray *warrant = [[nsmutablearray alloc]init]; warrant = [self getwaranty:topars start:beginwar and:eindwar]; if(warrant != null){ [waranties addobject:warrant]; nslog(@" de warant %@ ", [waranties objectatindex:1]); } return waranties;
i find fisgy enters first method shown here, 10 times, while ask once... searvhin problems on 4 hours now, getting tired of erros, error not shown...
please point me errors...
looking @ code have concerns how brittle is. it's looking series of spaces separate warranties, best way split data?
besides you're making assumptions on splits. example:
specarray = [thewarant componentsseparatedbystring:@" "];
is assigned , check both index 0 , 1, never make sure there 2 values in array.
your nslog
s @ bottom don't check array bounds before they're processed.
spaces make notoriously bad delimiters data. if you're looking parse html there tools out there might job better.
Comments
Post a Comment