0

コードで説明されているように物事が起こっている理由を理解しようとしています。aComb.someArray時間内にまだ割り当てられていない場合はinstantiateViewControllerWithIdentifierNULLを返しますが、タイマーを設定するとデータが魔法のようにそこに表示されることを理解できます。いタイマーを使用せずにこれを回避する方法の説明とアイデアが欲しいです。

ViewControllerA:

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    ViewControllerB *aComb = [storyboard instantiateViewControllerWithIdentifier:@"ViewControllerBID"];
    aComb.view.frame = self.combinationsContainer.bounds;
    aComb.someArray = _someArray;
    [self.combinationsContainer addSubview:aComb.view];
    [self addChildViewController:aComb];
    [aComb didMoveToParentViewController:self];

ViewControllerB:

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"%@",_someArray); //<-- this will return NULL
}

タイマー付きのViewControllerB:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [NSTimer scheduledTimerWithTimeInterval: 1
                                                    target: self
                                                  selector: @selector(test)
                                                  userInfo: nil
                                                   repeats: NO];
}
-(void)test
{
         NSLog(@"%@",_someArray); // <-- this will return Data
}
4

1 に答える 1

0

呼び出すaComb.view.frame = self.combinationsContainer.bounds;と、ViewControllerB の didLoad メソッドがトリガーされます。しかし、配列が割り当てられていないときまでに、それは戻ります.しかしNil、タイマーが起動すると、配列はその値を取得します.

この問題を解決するには。フレームを設定する前に配列を割り当てます。つまり、

aComb.someArray = _someArray;
aComb.view.frame = self.combinationsContainer.bounds;
于 2013-08-12T11:07:34.077 に答える