iphone - Why is my multi-component UIPickerView crashing? -
i'm trying create simple pickerview 2 components, drawing label data small mutablearray , output data simple matrix. purpose of wheel select value 0 1000, , spit out number in label , value rest of application's functions.
some specific info i'm doing: (skip down last paragraph problem)
the left wheel spins "hundred's" column, , right wheel spins "ten's" column, you're creating 1 value 2 wheels. want let user create value of 0, 10, 20, 30... 990, 1000 (every ten units 1000).the first component easy label, have 2 arrays populate second component's row's labels. first array second component creates 00 - 90 label, second array (for when 1000 selected) has 00 value. when user wants select 1000, 10 on first wheel , 00 on second. change row count second wheel component when first wheel component @ row 10. second component shows "00". didselectrow method uses matrix values of 0 - 990 , works great. , make string , convert number when user selects 1000 using if statements.
the problem in rare circumstance of when user spins component 0 create value of "1000" (the last row), , if start spinning second component before first component has chance stop spinning (basically spinning in hurry!), app crashes. think it's trying find value row doesn't exist. have other parts of app function , crash under same situation. there problem approach changing number of rows/labels rows based on selection of different component? or simple in code?
thanks reading , in advance help!
here's code:
//baggage array baggagehundredsarray = [[nsmutablearray alloc] init]; (int = 1; <= 10; i++) { nsstring *mybagstring = [nsstring stringwithformat:@"%d", i]; [baggagehundredsarray addobject:mybagstring]; } [baggagehundredsarray insertobject:@"- " atindex:0]; baggagetensarray = [[nsmutablearray alloc] init]; (int = 10; <= 90; = + 10) { nsstring *mybagstring2 = [nsstring stringwithformat:@"%d lbs.", i]; [baggagetensarray addobject:mybagstring2]; } [baggagetensarray insertobject:@"00 lbs." atindex:0]; baggagetensarray2 = [[nsmutablearray alloc] init]; [baggagetensarray2 insertobject:@"00 lbs." atindex:0]; - (nsinteger)pickerview:(uipickerview *)thepickerview numberofrowsincomponent:(nsinteger)component { if (thepickerview == baggagepicker) { nsinteger numcomps2 = 0; switch (component) { case 0: numcomps2 = [baggagehundredsarray count]; break; case 1: if ([baggagepicker selectedrowincomponent:0] <= 9) { numcomps2 = [baggagetensarray count]; } else { numcomps2 = [baggagetensarray2 count]; } break; } return numcomps2; } } - (uiview *)pickerview:(uipickerview *)pickerview viewforrow:(nsinteger)row forcomponent:(nsinteger)component reusingview:(uiview *)view { uilabel *pickerlabel = (uilabel *)view; if (pickerview == baggagepicker) { if ((pickerlabel == nil) || ([pickerlabel class] != [uilabel class])) { //newlabel cgrect frame = cgrectmake(0.0, 0.0, 110, 32.0); pickerlabel = [[[uilabel alloc] initwithframe:frame] autorelease]; pickerlabel.textalignment = uitextalignmentleft; pickerlabel.backgroundcolor = [uicolor clearcolor]; pickerlabel.font = [uifont boldsystemfontofsize:12]; } pickerlabel.textcolor = [uicolor blackcolor]; switch (component) { case 0: //cgrect frame = cgrectmake(0.0, 0.0, 80, 32); //pickerlabel = [[[uilabel alloc] initwithframe:frame] autorelease]; [pickerlabel settextalignment:uitextalignmentright]; [pickerlabel setbackgroundcolor:[uicolor clearcolor]]; [pickerlabel setfont:[uifont boldsystemfontofsize:23]]; [pickerlabel settextcolor:[uicolor blackcolor]]; [pickerlabel settext:[baggagehundredsarray objectatindex:row]]; break; case 1: if ([baggagepicker selectedrowincomponent:0] <= 9) { [pickerlabel settextalignment:uitextalignmentleft]; [pickerlabel setbackgroundcolor:[uicolor clearcolor]]; [pickerlabel setfont:[uifont boldsystemfontofsize:21]]; [pickerlabel settextcolor:[uicolor blackcolor]]; [pickerlabel settext:[baggagetensarray objectatindex:row]]; } else { [pickerlabel settextalignment:uitextalignmentleft]; [pickerlabel setbackgroundcolor:[uicolor clearcolor]]; [pickerlabel setfont:[uifont boldsystemfontofsize:21]]; [pickerlabel settextcolor:[uicolor blackcolor]]; [pickerlabel settext:[baggagetensarray2 objectatindex:row]]; } break; } return pickerlabel; } - (void)pickerview:(uipickerview *)thepickerview didselectrow:(nsinteger)row incomponent:(nsinteger)component { if (thepickerview == baggagepicker) { [baggagepicker reloadallcomponents]; nsinteger hundredswheel = [thepickerview selectedrowincomponent:0]; nsinteger tenswheel = [thepickerview selectedrowincomponent:1]; //lbs. int column5 [10][10] = { {0,10,20,30,40,50,60,70,80,90}, {100,110,120,130,140,150,160,170,180,190}, {200,210,220,230,240,250,260,270,280,290}, {300,310,320,330,340,350,360,370,380,390}, {400,410,420,430,440,450,460,470,480,490}, {500,510,520,530,540,550,560,570,580,590}, {600,610,620,630,640,650,660,670,680,690}, {700,710,720,730,740,750,760,770,780,790}, {800,810,820,830,840,850,860,870,880,890}, {900,910,920,930,940,950,960,970,980,990}, }; // totals label if (hundredswheel <= 9) { mybaggagestring = [nsstring stringwithformat:@"%i", (column5[hundredswheel][tenswheel])]; baggageweightlabel.text = mybaggagestring; baggageweightint = [mybaggagestring intvalue]; baggageweightfloat = [mybaggagestring floatvalue]; baggagemomentfloat = baggageweightfloat * 731.10; [self calculateweight]; paxviewbaggageweightlabel.text = mybaggagestring; nslog(@"value of mybaggagestring %@", mybaggagestring); [baggagepicker reloadallcomponents]; } if (hundredswheel == 10){ mybaggagestring = [nsstring stringwithformat:@"1000"];//, [lastfuelvalues objectatindex: [weightpicker selectedrowincomponent:1]]]; baggageweightlabel.text = mybaggagestring; baggageweightint = [mybaggagestring intvalue]; baggageweightfloat = [mybaggagestring floatvalue]; baggagemomentfloat = baggageweightfloat * 731.10; [self calculateweight]; paxviewbaggageweightlabel.text = mybaggagestring; [baggagepicker reloadallcomponents]; }
Comments
Post a Comment