Skip to main content

error with scrollToRowAtIndexPath



I am getting an error when using my application that used tableviews, the error looks like this.







2012-01-19 10:19:51.442 bcode[1176:207] *** Terminating app due to uncaught exception 'NSRangeException', reason: '-[UITableView scrollToRowAtIndexPath:atScrollPosition:animated:]: row (3) beyond bounds (3) for section (0).'

*** First throw call stack:

(0x16c3052 0x1920d0a 0x166ba78 0x166b9e9 0x68a136 0x3bfdf 0x6c2fbf 0x6c32d4 0x6c35d7 0x6d2666 0x87890e 0x878c17 0x878c86 0x62c499 0x62c584 0x2718e00 0x13614f0 0x15fa833 0x15f9db4 0x15f9ccb 0x1d05879 0x1d0593e 0x5fba9b 0x2838 0x2795 0x1)

terminate called throwing an exception(gdb)







What is happening is that when the user drills down my navigation view they can select a cell from the tableview of each view, which later will be used to build a search string.





However I allow them to go back and change their selection if they made an error.. this error happens when the user changes the value of the parent view then going into the subview only if the previous selection was outside the number of entries in the current tableview..





normally this wouldn't be a big problem however, inside viewDidAppear I am calling a method that scrolls to the previously selected cell... which obviously is what is breaking the app and giving me the error.







- (void)viewDidAppear:(BOOL)animated

{

[super viewDidAppear:animated];

//Scroll to previously selected value

[self.tableView scrollToRowAtIndexPath:oldCheckedIndexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES];

}







how can I stop this from executing I have tried about a 100 different if statments in the parent view and the subview catching the new indexpath and checking agains oldselected indexpaths then setting







oldCheckedIndexPath = nil;







however somehow it always manages to mess up anyway.


Comments

  1. The clean way, assuming self is the tableView datasource:

    Check the number of sections in the tableview:

    if ( [self numberOfSectionsInTableView:self.tableView]
    > oldCheckedIndexPath.section


    and check the number of rows in that section:

    && [self tableView:self.tableView numberOfRowsInSection:
    oldCheckedIndexPath.section] > oldCheckedIndexPath.row )
    {
    [self.tableView scrollToRowAtIndexPath: // etc etc etc


    Or, the quick hack:

    @try {
    [self.tableView scrollToRowAtIndexPath: // etc etc etc
    }
    @catch ( NSException e )
    {
    NSLog(@"bummer: %@",e);
    }

    ReplyDelete

Post a Comment

Popular posts from this blog

[韓日関係] 首相含む大幅な内閣改造の可能性…早ければ来月10日ごろ=韓国

div not scrolling properly with slimScroll plugin

I am using the slimScroll plugin for jQuery by Piotr Rochala Which is a great plugin for nice scrollbars on most browsers but I am stuck because I am using it for a chat box and whenever the user appends new text to the boxit does scroll using the .scrollTop() method however the plugin's scrollbar doesnt scroll with it and when the user wants to look though the chat history it will start scrolling from near the top. I have made a quick demo of my situation http://jsfiddle.net/DY9CT/2/ Does anyone know how to solve this problem?

Why does this javascript based printing cause Safari to refresh the page?

The page I am working on has a javascript function executed to print parts of the page. For some reason, printing in Safari, causes the window to somehow update. I say somehow, because it does not really refresh as in reload the page, but rather it starts the "rendering" of the page from start, i.e. scroll to top, flash animations start from 0, and so forth. The effect is reproduced by this fiddle: http://jsfiddle.net/fYmnB/ Clicking the print button and finishing or cancelling a print in Safari causes the screen to "go white" for a sec, which in my real website manifests itself as something "like" a reload. While running print button with, let's say, Firefox, just opens and closes the print dialogue without affecting the fiddle page in any way. Is there something with my way of calling the browsers print method that causes this, or how can it be explained - and preferably, avoided? P.S.: On my real site the same occurs with Chrome. In the ex