0

まず第一に、これが何らかの形で重複投稿である場合は、何時間も検索しても見つからないため、お気軽に正しい投稿を教えてください。

アプリで MasterDetail viewController を使用していますが、開発の最初の 1 週間ほどの間、デフォルト以外の追加の ViewVontrollers やセグエはありませんでした。メインコードを書きましたが、Master と Detail の viewController は完璧に動作しています。詳細ビューからプッシュ セグエを使用して別の VC を追加するとすぐに、アプリが即座にクラッシュします。これはエラーです:

***Terminating app due to uncaught exception 'NSInvalidArgumentException', reason '-[UINavigationController setPlayer:]: unrecognized selector sent to instance ...'そして、ヘックスの束。

AppDelegate.m で、次の行をコメントアウトすると:

rightViewController.delegate = rightViewController

その後、アプリが起動し、プッシュ セグエが機能しますが、明らかに、MasterView でセルを選択すると、次のエラーが発生してクラッシュします。

***Terminating app due to uncaught exception 'NSInvalidArgumentException', reason '-[UINavigationController selectedPlayer:]: unrecognized selector sent to instance ...'そして、ヘックスの束。

関連すると思われるすべてのコードを次に示します。

AppDelegate.m

#import "AppDelegate.h"
#import "LeftViewController.h"
#import "RightViewController.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
    UINavigationController *leftNavController = [splitViewController.viewControllers objectAtIndex:0];
    LeftViewController *leftViewController = (LeftViewController *)[leftNavController topViewController];
    RightViewController *rightViewController = [splitViewController.viewControllers objectAtIndex:1];

    Player *selectedPlayer = [[leftViewController preclears]objectAtIndex:0];
    [rightViewController setPlayer:selectedPlayer];

    leftViewController.delegate = rightViewController;
    return YES;
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    // Called when the application is about to terminate. Save data if appropriate.   See also applicationDidEnterBackground:.
}

@end

LeftViewController.m (一部)

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    //Re-fetch the feed from the Postgres Database when a user selects an entry

    [JSONHTTPClient getJSONFromURLWithString:@"http://myurl" completion:^(NSDictionary *json, JSONModelError *err) {
    NSError* error = nil;
    _feed = [[PostgresFeed alloc] initWithDictionary:json error:&error];

    //Print the data fethced to NSLog in JSON format

    [[NSNotificationCenter defaultCenter] postNotificationName:@"myNotification" object:nil userInfo:[[json objectForKey:@"player"] objectAtIndex:indexPath.row]];

}];

Player *selectedPlayer = [_players objectAtIndex:indexPath.row];

if (_delegate) 
    {
        [_delegate selectedPlayer:selectedPlayer];
    }
}

だから、私は何か間違ったことをしていますが、それが何であるかわかりません。私は多くのグーグルを行ってきましたが、まだ答えを見つけていません。誰かが知りたい場合に備えて、私は iOS と Obj C の初心者であり、MasterDetail アプリは iPad SplitViews の Ray Wenderlich チュートリアルに基づいています。また、セグエに関する Scott Sherwood チュートリアルのいくつかをチェックアウトしましたが、そこには何の答えも見つかりませんでした。

さらにコードが必要な場合はお知らせください。

4

1 に答える 1

1

エラーメッセージ

-[UINavigationController setPlayer:]: unrecognized selector ...

ことを示します

RightViewController *rightViewController = [splitViewController.viewControllers objectAtIndex:1];

UINavigationController期待どおりのインスタンスではなく、インスタンスを返しますRightViewController。解決策は、View Controller 階層の構造によって異なります。左のView Controllerと同様に進めなければならない場合があります。

UINavigationController *rightNavController = [splitViewController.viewControllers objectAtIndex:1];
RightViewController *rightViewController = (RightViewController *)[rightNavController topViewController];
于 2013-07-06T19:37:43.980 に答える