3

私は初心者のiOS開発者であり、最近いくつかのAndroidアプリを開発しましたが、iOSの専門用語に精通していません。私の問題を説明させてください。

2つの異なるを使用したいUIViewController。両方のコントローラーのファイルを作成.hしました。.m私の計画は、最初のViewControllerが画面に表示されてから5秒後に最初のViewControllerの上にsecontViewControllerをプッシュすることです。つまり、最初のビューコントローラはスプラッシュスクリーンなどのようなものです。

これが私の貢献です。最初のViewControllerで、次の2つの方法を定義しました(もちろん、そのうちの1つは実装されています)。

-(void) pushSecondController {
    SecondViewController *secondController = [[SecondViewController alloc]
                                              initWithNibName: nil
                                              bundle: NULL];
    [self.navigationController pushViewController: secondController animated: YES];
}

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self performSelector: @selector(pushViewController:animated:)
                withObject: nil
                afterDelay: 5.0f];
}

そして、2番目のViewControllerは次のようになります。

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    self.title = @"Second Controller";
}

方法のみを変更しましたviewDidLoad。シミュレーターを実行すると、最初のビューコントローラーが正常に機能し、5秒間待機してクラッシュしました。出力は次のようになります。

2012-08-24 10:46:34.104 NavApplication[20355:f803] -[ViewController pushViewController:]: unrecognized selector sent to instance 0x6e7f780
2012-08-24 10:46:34.107 NavApplication[20355:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ViewController pushViewController:]: unrecognized selector sent to instance 0x6e7f780'

もう1つ質問させてください。との間には違いがあることを私は知っていmethodNameますmethodName:。誰かが違いを説明できますか?

どんな助けでもいただければ幸いです。

アップデート:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.window.rootViewController = self.viewController;
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
    [self.window makeKeyAndVisible];
    [self.window addSubview: self.navigationController.view];
    return YES;
}
4

3 に答える 3

3

に変更@selector(pushViewController:animated:)@selector(pushSecondController)ます。

于 2012-08-24T08:22:28.777 に答える
3

上記のように、performSelectorコマンドを次のように変更することをお勧めします。

[self performSelector: @selector(pushSecondController)
            withObject: nil
            afterDelay: 5.0f];

pushSecondControllerメソッドを呼び出すのではなく、メソッドを呼び出すようにするためですpushViewController:animated:

methodName2番目の質問について:との違いはmethodName::の最後にあるがmethodName:、このメソッドがパラメーターを受け取ることを意味することです。したがって、次の方法があります。

- (void)listItems
{
    // ...
}

- (void)insertItem:(NSDictionary *)item
{
    // ...
}

それらへの参照をに渡すとき@selector、最初のメソッド@selector(listItems)では、パラメーターを受け取らない@selector(insertItem:)ため、これを実行します。後者では、パラメーターを受け取るため、実行します。

アップデート

あなたのapplicationDidLaunchコードを見ただけです。にを追加するように物事を再配置してViewControllerから、ウィンドウのrootViewControllerとしてUINavigationControllerを設定することをお勧めします。UINavigationControllerそのようです:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.

    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController];

    self.window.rootViewController = self.navigationController;

    [self.window makeKeyAndVisible];
    return YES;
}
于 2012-08-24T08:30:30.340 に答える
0

didFinishLaunchingWithOptionsメソッドを次のように変更してください。

   - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
        self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController];

            self.window.rootViewController = self.navigationController;

            [self.window makeKeyAndVisible];

            return YES;
    }
于 2012-08-24T08:32:55.817 に答える