开发者

indexPath null in didSelectRowAtIndexPath in an ipad splitview navigation app

I'm porting a fairly simple iPhone Navigation based app to a Split View iPad app.

I have two nested levels of navigation on the Master view. The user picks a value from the first table and it loads the 2nd table. Selecting a value on the second table loads the Detail item for the detail view. Or it's supposed to. The didSelectRowAtIndexPath on my 2nd controller is firing but indexPath is null.

I'm following the SplitView template fairly closely. I'm only really getting off the beaten track by adding that 2nd TableViewController. My RootViewController loads the 2nd TableViewController on didSelectRowAtIndexPath, and that part's working. In my 2nd TableViewController.m I'm trying to set the detail item for the DetailView. But it's that didSelectRowAtIndexPath method that's not giving me the row. I'm fairly new to this, but it seems odd to me that the method for clicking a row would fire but not have the index for that row.

Here's the code:

- (void)tableView:(UITable开发者_运维百科View *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    TrackerSplitViewAppDelegate *appDelegate = (TrackerSplitViewAppDelegate *)[[UIApplication sharedApplication] delegate];
    detailViewController.thisRequest = [appDelegate.requests objectAtIndex:indexPath.row];
    NSLog(@"Request Loaded: %@", detailViewController.thisRequest.Title);
    NSLog(@"Index Row: %@", indexPath.row);
    [appDelegate release];

}

The array of requests is loading properly (appDelegate.requests) but my objectAtIndex is failing because indexPath is null. Or at least indexPath.row is null.

EDIT: Ok, the comments below are correct, I'm not using NSLog properly. The indexPath.row is fine (I thought it was also showing up as null using the mouseover in the debugger, but I just don't know how to use the debugger properly).

The detailViewController property isn't getting set right for some reason. If I substitute with this:

//detailViewController.thisRequest = [appDelegate.requests objectAtIndex:indexPath.row];
Request *aRequest = [appDelegate.requests objectAtIndex:indexPath.row];

The aRequest object loads just fine. So the next question is why setting my property on my detailViewController object isn't working. I'm still quite fuzzy on how things persist in this environment. Any additional input would be great.


The value of indexPath.row is not a string. You can't log it with %@. Try using %i or %li, which are used for integers. Also, you haven't reaLly properly checked for the request to be loaded, afaik. Is the title property only available after a successful load?


NSLog(@"Index Row: %@", indexPath.row);

indexPath is an NSIndexPath object, you could use %@ to print it.
But indexPath.row and indexPath.section are NSUInteger. So you have to use %u to print them.

So maybe your indexpath.row is not nil (as in no object) but 0 (as in zero, the number before one)


Select a row that is not the first one and you should get a crash.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜