4

iOS 6 には表示されない iOS 7 の問題があります。

従業員を追加するために別のナビゲーション コントローラーを表示しているナビゲーション コントローラーがあります。この 2 番目のコントローラーはモーダルで表示されます。「キャンセル」または「完了」ボタンで 2 番目のコントローラーを閉じると、エラーが発生します。エラーは次のとおりです。

QuickSchedule[880:60b] 警告: プレゼンテーションまたは却下の進行中にビュー コントローラから却下しようとしました!

アンワインド セグエを使用し、次の関連コードを使用して最初のコントローラーを閉じています。

これは ScheduleViewController.m (私のメイン コントローラー ウィンドウ) にあります。

- (IBAction)done:(UIStoryboardSegue *)segue
{
    if ([[segue identifier] isEqualToString:@"DoneEditing"]) {
        [[MyManager sharedManager] saveChanges];
        [self dismissViewControllerAnimated:YES completion:NULL];
    }
}

「完了」ボタンの接続インスペクターでの接続は、単純に「アクション -> [アンワインド完了:]」です。

Xcode 5 にアップグレードする前にエラーはありませんでした。これはすべて、Xcode とストーリーボードを iOS 7 にアップグレードした後に始まりました。

アプリの別の場所で同じエラーが発生していますが、モーダルに表示されたビュー コントローラーを使用しています。

EmployeeViewController から AddEmployeeViewController にモーダルで移動します。AddEmployeeViewController から戻ると、再びエラーが発生します。

EmployeeViewController.m

- (IBAction)done:(UIStoryboardSegue *)segue
{
    if ([[segue identifier] isEqualToString:@"ReturnInput"]) {
        AddEmployeeViewController *addController = [segue sourceViewController];
        if (addController.employee) {
            [[MyManager sharedManager] saveChanges];
            [[self tableView] reloadData];
        }
        if (![self.presentedViewController isBeingDismissed]) {
            [self dismissViewControllerAnimated:YES completion:nil];
        }
    }
}

- (IBAction)cancel:(UIStoryboardSegue *)segue
{
    if ([[segue identifier] isEqualToString:@"CancelInput"]) {
        [self dismissViewControllerAnimated:YES completion:NULL];
    }
}

ここに AddEmployeeViewController.m があります

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"ReturnInput"]) {
        if ([self.firstNameField.text length] || [self.lastNameField.text length]) {

            Employee *newEmployee = [[MyManager sharedManager] createEmployeeWithFirstName:self.firstNameField.text andLastName:self.lastNameField.text];
            [[MyManager sharedManager] addEmployeeToList:newEmployee];
            self.employee = newEmployee;
        }
    }
}

私はまだ学んでおり、オンラインで何時間も探しましたが、これに対する答えが見つかりません. 「保存コード」を完了ブロックに入れてみました。私はそれを元に戻し、完了ブロックの引数で NULL の代わりに nil を使用してみました。ご覧のとおり、完了ブロックの引数のある場所には nil があり、別の場所には NULL があります。何をしても、エラーが表示され続けます。

すべてが機能する限り機能します。このエラーがコンソールに記録されるだけです。どんな助けでも大歓迎です。

注: 通常のプッシュ ナビゲーション コントローラーではこのエラーは発生しません。これは、モーダルに表示されたビュー コントローラーを閉じるときにのみ発生します。

4

5 に答える 5

2

コードを再確認してください。別のアニメーション トランジションを開始する前に、完全に終了していないアニメーションがあります。私は同じ問題を抱えていて、複数のアニメーションがわずかに重なるまで追跡しました。設定dismissViewControllerAnimated:NOすると、私が何を意味するかがわかります。

于 2013-09-19T19:37:29.363 に答える
0

iOS6 ではなく iOS7 に固有のこのタイプの警告は、他の状況でも発生します。私の場合、それは電子メールアラートの却下に関連していました。iOS7では以下のメソッドに条件構造を追加するだけで済みました。

- (void)didPresentAlertView:(UIAlertView *)alertView
{
    if(![[self modalViewController] isBeingDismissed])
    {
        [self dismissModalViewControllerAnimated:YES];
    }
}
于 2014-10-30T12:30:50.340 に答える