0

私のアプリはTabBarControllerであり、押されたタブに応じて異なるアクションを実行する必要があるため、TabBarContollerを委任して取得しました。

ここで、NavigationController を含むタブが押された場合、データベースの値に応じて、表示されるビューは最初のビューまたは最後のビューになるため、Tabs.m では次のようになります。

-(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
 NSArray *viewArrays = [(UINavigationController*)viewController viewControllers];

switch (tabBarController.selectedIndex) {

    case 3:
    {
        NSString *query = @"SELECT * FROM login";
        sqlite3_stmt *statement = [[Database alloc] select:query];

        if(sqlite3_step(statement) == SQLITE_ROW) {
           [(UINavigationController*)viewController popToViewController:[viewArrays objectAtIndex:1] animated:YES];

        }
        sqlite3_finalize(statement);
        break;
    }
    default:
        break;
}

}

問題は objectAtIndex:1 が現在存在しないことです

4

1 に答える 1

1

popViewを使用できるのは、pushViewを少なくとも1回実行したことがある場合のみですNSLogを使用してself.navigationController.viewControllers内のオブジェクトを印刷して確認し、オブジェクトが含まれている場合は、インデックスを適切に(範囲内で)指定します。なぜ(UINavigationController *)viewControllerを実行しているのか混乱しています。代わりに、これを試してください。

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:2] animated:YES];
于 2012-09-21T09:19:36.617 に答える