2

iOS4.2以降でユニバーサルアプリケーションを作成しています。

と呼ばれるペン先がありDataInputViewController_iPhone.xibます。最初に表示されるViewControllerには、クラスを起動するためのボタンがありますDataInputViewController。それは行いますが、XIBファイルの内容は表示されません。黒い画面が表示されるだけです。

なぜこれが起こるのか考えはありますか?

新しいViewControllerを呼び出す次のコードがあります。

-(IBAction)clickedButton:(id)sender {
    if((UIButton *)sender == (UIButton *)startButton){
        NSString *nibName;
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
            nibName = @"DataInputViewController_iPhone";
        } else {
            nibName = @"DataInputViewController_iPad";
        }

        DataInputViewController *nextVC = [[DataInputViewController alloc] initWithNibName:nibName bundle:nil];
        [self.navigationController pushViewController:nextVC animated:YES];
    }
    else if((UIButton *)sender == (UIButton *)otherButton){
        NSLog(@"clicked the other button");
    }
}

このメソッドとinit新しいViewControllerのメソッドのNSLoggingは、nibNameOrNil変数が正しくプルスルーされたことを示しています。

これは、(標準の)initメソッドが次のようになっていることDataInputViewController.mです。

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

なぜこれが起こっているのか考えはありますか?または修正する方法は?

ありがとう :)

4

9 に答える 9

2

ペン先の名前を手動で設定する必要はありません。それらDataInputViewController~iphone.xibに名前を付けてからDataInputViewController~ipad.xib、を呼び出します[[DataInputViewController alloc] init]

詳細については、 iOSがデバイス固有のリソースをサポートするを参照してください。

于 2012-04-25T13:33:24.607 に答える
2

私も同じ問題を抱えていました。プロジェクトをクリーンアップし、XCodeを閉じ、Macを再起動して、プロジェクトを再度開きます。また、以前にシミュレーターまたはデバイスでアプリを削除することを忘れないでください。

于 2013-04-10T12:50:21.390 に答える
1

これを修正する唯一の方法は、ペン先とクラスを削除してから再作成することです。特にエレガントではありませんが、機能します...

于 2012-04-27T08:44:02.413 に答える
1

ユーティリティビューコントローラ用にiPadまたはiPhoneの.xibファイルをロードする必要がある場合にも同じ問題が発生しました。これはフォームであるため、IBOutletsとしてリンクされたUILabel要素とUITextField要素が多数含まれていました。レイアウト全体を作成し、すべての要素をリンクすると、ビルドして実行するまでは正常に機能していました。私はこのスレッドに投稿されたアドバイスを受け取り、.xibとクラスファイル(IBOutletsを大量にリンクする)の両方を再作成しましたが、成功しませんでした。

問題はこれでした。クラスの実装では、ルートビューを@synthesizedにすることはできません。ベースビューを合成するとすぐに、すべてが真っ暗になりました。「@synthesizeview;」を削除するだけです。ライン、すべてが魅力のように機能しました。ビューコントローラを提示したとき、すべてが再びそこにありました。

すべてのIBOutletsを含むクラスのヘッダーファイルは次のとおりです。

    #import <UIKit/UIKit.h>

@interface SignUpFormViewController : UIViewController <UITextFieldDelegate, NSXMLParserDelegate>

@property (strong, nonatomic) IBOutlet UIView *rootView;
@property (weak, nonatomic) IBOutlet UILabel *signUpFormLabel;
@property (weak, nonatomic) IBOutlet UIButton *infoButton;
@property (weak, nonatomic) IBOutlet UILabel *enterEmailLabel;
@property (weak, nonatomic) IBOutlet UITextField *enterEmailTextField;
@property (weak, nonatomic) IBOutlet UILabel *enterPasswordLabel;
@property (weak, nonatomic) IBOutlet UITextField *enterPasswordTextField;
@property (weak, nonatomic) IBOutlet UILabel *reEnterPasswordLabel;
@property (weak, nonatomic) IBOutlet UITextField *reEnterPasswordTextField;
@property (weak, nonatomic) IBOutlet UILabel *enterFirstNameLabel;
@property (weak, nonatomic) IBOutlet UITextField *enterFirstNameTextField;
@property (weak, nonatomic) IBOutlet UILabel *enterLastNameLabel;
@property (weak, nonatomic) IBOutlet UITextField *enterLastNameTextField;
@property (weak, nonatomic) IBOutlet UILabel *enterPhoneNumberLabel;
@property (weak, nonatomic) IBOutlet UITextField *enterPhoneNumberTextField;
@property (weak, nonatomic) IBOutlet UILabel *enterStreetAddressLabel;
@property (weak, nonatomic) IBOutlet UITextField *enterStreetAddressTextField;
@property (weak, nonatomic) IBOutlet UILabel *enterStreetAddress2Label;
@property (weak, nonatomic) IBOutlet UITextField *enterStreetAddress2TextField;
@property (weak, nonatomic) IBOutlet UILabel *enterCityLabel;
@property (weak, nonatomic) IBOutlet UITextField *enterCityTextField;
@property (weak, nonatomic) IBOutlet UILabel *enterStateLabel;
@property (weak, nonatomic) IBOutlet UITextField *enterStateTextField;
@property (weak, nonatomic) IBOutlet UILabel *enterZipLabel;
@property (weak, nonatomic) IBOutlet UITextField *enterZipTextField;
@property (weak, nonatomic) IBOutlet UIButton *backButton;
@property (weak, nonatomic) IBOutlet UIButton *signUpNowButton;

- (IBAction)infoButtonPressed:(id)sender;
- (IBAction)backButtonPressed:(id)sender;
- (IBAction)signUpNowButtonPressed:(id)sender;

@end

ルートビューが合成された実装ファイルは次のとおりです。

#import "SignUpFormViewController.h"

@implementation SignUpFormViewController
@synthesize rootView,signUpFormLabel,infoButton,enterEmailLabel,enterEmailTextField,enterPasswordLabel,enterPasswordTextField,reEnterPasswordLabel,reEnterPasswordTextField,enterFirstNameLabel,enterFirstNameTextField,enterLastNameLabel,enterLastNameTextField,enterPhoneNumberLabel,enterPhoneNumberTextField,enterStreetAddressLabel,enterStreetAddressTextField,enterStreetAddress2Label,enterStreetAddress2TextField,enterCityLabel,enterCityTextField,enterStateLabel,enterStateTextField,enterZipLabel,enterZipTextField,backButton,signUpNowButton,btnDone,btnPrev,btnNext,inputAccView,activeTextField,currentString;

合成されるプロパティのリストから「rootView」を削除するだけで、問題が解決するはずです。iPadとiPhoneの両方のレイアウトの.xibファイルを削除して再作成するよりもはるかに簡単です。

参考までに、ターゲットSDK=6.1でxCode4.6.3を使用しています

これが、この時間のかかる非常に苛立たしい問題を経験している他の人の助けになることを願っています。

于 2013-08-08T16:08:37.643 に答える
0

これはあなたを助けるかもしれません:シミュレーターまたはデバイス上のあなたのアプリを削除して、再実行してください。特に名前やローカリゼーションの周りでペン先をいじりすぎると、すべてが機能しているように見えますが(エラーは発生しません)、Xcodeは実際には変更を無視しています。

したがって、クリーンを実行し( [製品]- > [クリーン])、シミュレーターまたはデバイスから削除して、再度実行します。

于 2012-04-25T15:31:21.867 に答える
0

DataInputViewController.mにloadViewメソッドを実装し、メソッド内に次のように[superloadView]という行を追加する必要があります。


- (void)loadView {
    [super loadView];
}
于 2013-05-18T05:35:38.643 に答える
0

ファイル所有者からカスタムのサブクラス化されたUITableViewCell.hまたは.mファイルにアウトレットをドラッグしないと、同様に黒くなる可能性があることがわかりました。UITableViewCellのサブクラスに関連付けられている2つのファイルのいずれかにアウトレットをドラッグしてください。

于 2013-07-04T03:24:59.947 に答える
0

私の場合、同僚からxibファイルを受け取りました。十分にロードされたxibですが、表示されませんでした。非表示のチェックボックスがオンになっているため、1日すべてを費やしました

xibの[非表示]チェックボックスをオンにします。

于 2016-10-27T08:41:49.500 に答える
0

簡単な修正!! バージョンエディタに移動して標準エディタに戻ると、問題が修正されました

于 2017-09-01T20:21:00.127 に答える