0

UIAlertViewアカウント内のファイルへのアクセスを許可する次のモーダル ビューが表示される前に、ユーザー名とパスワードの資格情報を入力するために を使用しています。

ただし、デバッグすると、alertView が表示される前にモーダル ビューの「ViewDidLoad」メソッドが呼び出されるため、ビューがユーザー名とパスワードを取得できないため、プログラムがクラッシュすることがわかりました。

ここにコードがあります

-(IBAction) openShareFile:(id)sender
{
 if (!self.shareFileBrowser) {
    self.shareFileBrowser=[[ShareFileBrowserViewController alloc]   initWithNibName:@"ShareFileBrowserViewController" bundle:nil];
    self.alertView = [[UIAlertView alloc] initWithTitle:@"Verify your Credentials" message:@"Enter  Username & Password" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
    self.alertView.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;
    [self.alertView show];

    self.shareFileBrowser.domain=@"fidomoose";
    self.shareFileBrowser.delegate=self;
    self.shareFileBrowser.title=@"ShareFile Browser";
    self.navController= [[UINavigationController alloc] initWithRootViewController:self.shareFileBrowser];
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
        self.popController = [[UIPopoverController alloc] initWithContentViewController:self.navController];
    }
}

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
    if ([self.popController isPopoverVisible]) {
        [self.popController dismissPopoverAnimated:YES];
    } else {
        [self.popController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    }
}
else {
    [self presentModalViewController:self.navController animated:YES];
}

}

4

2 に答える 2

2

UIAlertViewビューの初期化のためのコードを次のようなデリゲートメソッドに配置するだけです

-(IBAction) openShareFile:(id)sender
{
    if (!self.shareFileBrowser) {

        self.alertView = [[UIAlertView alloc] initWithTitle:@"Verify your Credentials" message:@"Enter  Username & Password" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
        //Edit Two line inserted

        self.alertView.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;
        [self.alertView show];
    }
}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if(buttonIndex)
    {
        self.shareFileBrowser=[[ShareFileBrowserViewController alloc]   initWithNibName:@"ShareFileBrowserViewController" bundle:nil]; 
        //Edit two line deleted

        self.shareFileBrowser.domain=@"fidomoose";
        self.shareFileBrowser.delegate=self;
        self.shareFileBrowser.title=@"ShareFile Browser";
        self.navController= [[UINavigationController alloc] initWithRootViewController:self.shareFileBrowser];
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
            self.popController = [[UIPopoverController alloc] initWithContentViewController:self.navController];
        }
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
            if ([self.popController isPopoverVisible]) {
                [self.popController dismissPopoverAnimated:YES];
            } else {
                [self.popController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
            }
        }
        else {
            [self presentModalViewController:self.navController animated:YES];
        }
    }
}

編集:1

presentPopoverFromRect:の代わりにメソッドを使用し、代わりにpresentPopoverFromBarButtonItem:適切なCGRectivarを指定してくださいsender

これは間違いなくあなたの問題を解決します:)

于 2012-10-15T05:16:29.977 に答える
1

アラート ビューの DismissWithClickedButtonIndex:animated: が呼び出されるまで、モーダル ビューがインスタンス化 (またはプッシュ) されないように、アプリの構造を変更する必要があります。

于 2012-10-15T05:01:34.240 に答える