0

モーダル ビューから通常のビュー コントローラー ( PBSViewControllerDataDetail.h )に移動しようとすると、アプリをデバッグするときにアサーション エラーが発生します (モーダル ビューを表示した元のビュー コントローラーではありません) 。

基本的に私がやろうとしていることは次のとおりです。

ViewController1、モーダル ビューを開き、非同期要求を実行します。に戻ると、モーダルビュー内で取得されたデータをユーザーに提示する2番目の通常のView Controllerにユーザーを送信します。

モーダルが 2 番目のビュー コントローラーを表示しようとするまで、他のすべてが機能します。エラーが発生します (1 行目は、2 番目の VC を提示しようとするメソッド内からの NSLog 出力です)

2013-09-22 07:24:11.410 PBSDashboard[566:1303] flipToDataView->Send user to PBSViewControllerDataDetail
2013-09-22 07:24:11.411 PBSDashboard[566:1303] *** Assertion failure in -[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:], /SourceCache/UIKit_Sim/UIKit-2380.17/UIWindowController.m:211

注意してください: 私はこのプロジェクト内で NavigationViewController を使用しておらず、ロット全体を再起動して使用することを検討していますが、現時点では、モーダルから元のものではない通常の ViewController に移行する方法を理解しようとしています。

ターゲットをクリーンアップして、2 番目の VC をゼロから再作成しようとしましたが、どちらも成功しませんでした。

コード スニペット

PBSRequestViewController.h

#import <UIKit/UIKit.h>
#import "Unirest.h"
#import "PBSDaySales.h"

@class PBSRequestViewController;

@protocol PBSRequestViewControllerDelegate
    - (void) requestViewControllerDidFinish:(PBSRequestViewController *)controller;
@end

@interface PBSRequestViewController : UIViewController

@property (weak, nonatomic) IBOutlet id <PBSRequestViewControllerDelegate> delegate;
@property (weak, nonatomic) IBOutlet NSString *calendType;
@property (weak, nonatomic) IBOutlet NSString *targetDate;
@property (weak, nonatomic) IBOutlet UILabel *messageLabel;


- (void) runUnirestRequest:(NSString*)urlToGet;
- (void) loadDefaultSettings;
- (NSString*) buildRequestUrl:(NSString*)serverUrl withPort:(NSString*)serverPort withCalenderType:(NSString*)calendarType withDateStringParameter:(NSString*)selectedTargetDate;

- (IBAction)btnBack:(id)sender;

- (PBSDaySales*) deserializeJsonPacket:(NSDictionary*)httpJson;
- (void)createActivityIndicator;
- (void)flipToDataView;

@end

PBSRequestViewController.m (2 番目の vc の呼び出し関数のみ)

// Method will forward the user on to the data view.
// Used after the uniRestRequest is completed and data exists.
- (void) flipToDataView
{
    NSLog(@"flipToDataView->Send user to PBSViewControllerDataDetail");
    PBSViewControllerDataDetail *dataVc = [[PBSViewControllerDataDetail alloc] initWithNibName:@"PBSViewControllerDataDetail" bundle:nil];

    dataVc.daySalesData = daySalesFigures;

    [self presentViewController:dataVc animated:YES completion: nil];
}

PBSViewControllerDataDetail.h

#import <UIKit/UIKit.h>
#import "PBSDaySales.h"

@interface PBSViewControllerDataDetail : UIViewController
    @property (weak, nonatomic) PBSDaySales *daySalesData;
@end

PBSViewControllerDataDetail.m

#import "PBSViewControllerDataDetail.h"

@interface PBSViewControllerDataDetail ()

@end

@implementation PBSViewControllerDataDetail

@synthesize daySalesData;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    NSLog(@"View loaded");
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

PBSAppDelegate.m

#import "PBSAppDelegate.h"

#import "PBSViewController.h"

@implementation PBSAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        self.viewController = [[PBSViewController alloc] initWithNibName:@"PBSViewController_iPhone" bundle:nil];
    } else {
        self.viewController = [[PBSViewController alloc] initWithNibName:@"PBSViewController_iPad" bundle:nil];
    }
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}
4

1 に答える 1

0

モーダルから「通常」に移動するには、モーダル コントローラーの背後にある「通常の」コントローラー (多くの場合、ルート ナビゲーション コントローラー) を提示してから、モーダルを閉じる必要があります。ウィンドウのルート ビュー コントローラーとしてナビゲーション コントローラーを使用すると、モーダルのホストになる可能性があるため、作業が楽になります。モーダルから「通常」への遷移を使用しようとしてはいけません。常にモーダルを却下します。それが理にかなっている場合、モーダルは画面レイヤー内の概念的に異なるレベルにあります...

于 2013-09-22T08:25:49.363 に答える