質問

私がiPhoneアプリに取り組んでいますし、私のコントローラでIBOutletフィールドに(ヌル)の参照を取得しています。私はXIBでファイルの所有者として設定されているのUIViewControllerのサブクラスを持っています。私は、コントローラに配線されているUI要素のセットを有しています。 NIBからロードすると、これらのUI要素のプロパティを設定しようとした後、私は、彼らが(ヌル)であることを見つけます。明確にするために、いくつかのコード:

ExpandSearchPageController.hます:

@interface ExpandSearchPageController : UIViewController
{
  IBOutlet UITextView * completeMessageView;
}

-(void)checkTextField;

@property (nonatomic, retain) IBOutlet UITextView * completeMessageView;

ExpandSearchPageController.mます:

@implementation ExpandSearchPageController

@synthesize completeMessageView;

-(void)checkTextField
{
  NSLog(@"text field: %@",completeMessageView);
}

ExpandSearchPageControllerはExpandSearchPage.xibのためのファイルの所有者として設定されています。 ExpandSearchPage.xibのUITextViewはcompleteMessageViewに配線されます。

私がコールすると、

ExpandSearchPageController * searchExpanderPage = [[ExpandSearchPageController alloc] initWithNibName:@"ExpandSearchPage" bundle:[NSBundle mainBundle]];

[searchExpanderPage checkTextField];

結果が

"text field: (null)"
役に立ちましたか?

解決

私は時間以上の問題を見た後、質問を推測では、それを把握するために私を導います:

私はちょうど今ではすべてがインスタンス化されています...ビューを表示した後、テキストボックスをチェックするために自分のコードを変更します。

ことを想像してみて!あなたがそれらを表示するまでのUI要素がインスタンス化されていません。

他のヒント

これが解決されます。

IBOutletsビューコントローラがロードを完了するまで使用する準備ができていない。

あなたはUILabelsテキストプロパティを設定したい場合は、

たとえば、あなたが最初にあなたのコントローラにNSStringのを設定し、どこかのviewDidLoadのように、ラベルのテキストプロパティを設定する必要があります。

あなたのfirstViewController.m中のSO:(これは絵コンテのためですが、同じ考え方が適用されます)

- (void)buttonPress:(id)sender {
   [self performSegueWithIdentifier:@"mySegue" sender:self];
}

- (void)prepareForSegue(UIStoryboardSegue *)segue sender:(id)sender {
   SecondViewController *secondViewController = [segue destinationViewController];
   secondViewController.stringForLabel = @"My Label String";
}

次に、あなたのsecondViewControllerの.hファイルでます:

@property (strong, nonatomic) IBOutlet UILabel *label;
@property (strong, nonatomic) NSString *stringForLabel;

その後、我々はsecondViewController.mののviewDidLoadで、UILabel上のテキストプロパティを設定します。 この段階では、IBOutletを作成して行く準備ができているされています。

- (void)viewDidLoad {
   [super viewDidLoad];
   self.label.text = self.stringForLabel;
}

ヌルIBOutletポインタの別の潜在的な原因は、出口接続を作成した後、Interface BuilderでXIBファイルを保存するために忘れされます。

あなたのビューコントローラのビュープロパティを確認してください(つまり、この場合は、ファイルの所有者は)あなたのXIBのビューに配線されています。あなたのテキストフィールドは、ほぼ確実にそのサブビューであるとして、それはあまりにもに配線することを取得することが重要だ(と私はペン先がそのビーイングを設定せずに正常にロードされますとは思わない)。

これは、私はそれを行う方法です。

//in your view controller
-(void)setUp
{
    [self.cardView layoutIfNeeded];
    LearnCardPlainText *cardNib = [[[UINib nibWithNibName:@"LearnCardPlainText" bundle:nil] instantiateWithOwner:self options:nil] objectAtIndex:0];
    cardNib.frame = self.cardView.frame;
    [cardNib setUpWithPart:learnModel];
    [self.view addSubview:cardNib];
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top