1

詳細ビューを変更すると iPad アプリがクラッシュします。問題の原因となっているコード行を特定するために、例外ブレークポイントを設定しました。かなり散発的に発生しているように見えるので、実際に何が起こっているのかわかりません。助言がありますか?

たとえば、次の行でクラッシュしました。

self.splitViewController.viewControllers = details;

マスター ビュー コントローラーの didSelectRowAtIndexPath メソッドで

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 0)
    {
        KFBDetailViewController *detailViewController = [[KFBDetailViewController alloc] initWithNibName:@"KFBDetailViewController_iPad" bundle:nil];
        UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController];

        NSMutableArray *details = [self.splitViewController.viewControllers mutableCopy];

        [details replaceObjectAtIndex:1 withObject:detailNavigationController];

        self.splitViewController.viewControllers = details;

        KFBAppDelegate *appDelegate = (KFBAppDelegate *)[[UIApplication sharedApplication]delegate];
        appDelegate.window.rootViewController = self.splitViewController;
    }

ここでも別のビューでそれを行いました:

appDelegate.splitViewController.viewControllers = details;

そのための didSelectRowAtIndexPath は次のとおりです。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSMutableArray *details = [self.splitViewController.viewControllers mutableCopy];

    UINavigationController *detailNav = [[UINavigationController alloc]initWithRootViewController:webViewController];

    [details replaceObjectAtIndex:1 withObject:detailNav];

    KFBAppDelegate *appDelegate = (KFBAppDelegate *)[[UIApplication sharedApplication]delegate];

    appDelegate.splitViewController.viewControllers = details;
    appDelegate.window.rootViewController = self.splitViewController;
    appDelegate.splitViewController.delegate = webViewController;

    [appDelegate.splitViewController viewWillAppear:YES];

    // Grab the selected item
    RSSItem *entry = [[channel items]objectAtIndex:[indexPath row]];

    NSLog(@"Channel Items: %@", [[channel items]objectAtIndex:[indexPath row]]);

    // Construct a URL with the link string of the item
    NSURL *url = [NSURL URLWithString:[entry link]];

    NSLog(@"Link: %@", [entry link]);

    // Construct a request object with that URL
    NSURLRequest *req = [NSURLRequest requestWithURL:url];

    NSLog(@"URL: %@", url);

    // Load the request into the web view
    [[webViewController webView]loadRequest:req];
    webViewController.hackyURL = url;
    NSLog(@"Request: %@", req);

    // Set the title of the web view controller's navigation item
    [[webViewController navigationItem]setTitle:[entry title]];

    NSLog(@"Title: %@", [entry title]);
}

編集:マスタービューコントローラーテーブルビューの最初の行を選択して最初の詳細ビューを表示し、別の行を選択して別のコンテンツを表示すると、アプリがクラッシュするようです。どの時点でも最初の行を選択しなければ、すべて正常に機能します。

4

1 に答える 1

1

マスタービューで最初の行をタップしたときに最初の詳細ビューを表示する方法を調整することで、問題を解決できました。

私の元の投稿で元の実装を見ることができます。これが私がそれをどのように変更したかです。

if (indexPath.row == 0)
    {
        KFBDetailViewController *detailViewController = [[KFBDetailViewController alloc]initWithNibName:@"KFBDetailViewController_iPad" bundle:nil];

        NSMutableArray *details = [self.splitViewController.viewControllers mutableCopy];

        UINavigationController *detailNav = [[UINavigationController alloc]initWithRootViewController:detailViewController];

        [details replaceObjectAtIndex:1 withObject:detailNav];

        KFBAppDelegate *appDelegate = (KFBAppDelegate *)[[UIApplication sharedApplication]delegate];
        appDelegate.splitViewController.viewControllers = details;
        appDelegate.window.rootViewController = self.splitViewController;
        appDelegate.splitViewController.delegate = detailViewController;
        [appDelegate.splitViewController viewWillAppear:YES];
    }
于 2013-08-06T13:12:37.723 に答える