0

UITableViewController のサブクラスである SlidingVC ヘッダーのプロパティ宣言は次のとおりです。

@property (strong, nonatomic) NSString *user;

これが私の合成行です:

@synthesize user = _user,sortedWordlist = _sortedWordlist, wordlist = _wordlist;

これが私のカスタムinitです:

- (id)initWithUser:(NSString*)theUser
{
    self = [super init];
    if (self) {
        if ([theUser isEqualToString:@"user"]) {
            _user = @"user";
        }
        else if ([theUser isEqualToString:@"opponent"]){
            _user = @"opponent";
        }
    }
    return self;
}

何が起こっているかというと、 pver をステップ実行すると、変数デバッガー ウィンドウでのメモリ アドレスが取得されることがinitWithUser:わかります。私はステップオーバーしてからメソッドを閉じますが、まだ設定されています。ただし、Xcode はもう一度戻ってきて、ステップ オーバーすると、隣にメモリ アドレスがなくなり、後続のメソッドのために残ります。_usertheUserreturn self}return self_usernull

2回返されて、2回目にnullに設定されるのはなぜですか?


SlidingVC をインスタンス化する MainVC のメソッドは次のとおりです。

- (WSWordlistTableViewController *)setupWordlistTableViewController:(NSString*)user
{
    WSWordlistTableViewController *wordlistTableViewController;
    UIView *wordlistContainerView;
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                             bundle: nil];

    if ([user isEqualToString:@"user"]){
        if(!self.userWordlistTableViewController){
            self.userWordlistTableViewController  = [[WSWordlistTableViewController alloc] initWithUser:@"user"];
            wordlistTableViewController = self.userWordlistTableViewController;
            wordlistContainerView = self.userWordlistContainerView;
        }
    }
    else if ([user isEqualToString:@"opponent"]) {
        if(!self.opponentWordlistTableViewController){
            self.opponentWordlistTableViewController  = [[WSWordlistTableViewController alloc] initWithUser:@"opponent"];
            wordlistTableViewController = self.opponentWordlistTableViewController;
            wordlistContainerView = self.opponentWordlistContainerView;
        }
    }

    wordlistTableViewController = [mainStoryboard  instantiateViewControllerWithIdentifier:@"wordlistTableViewController"];

    wordlistTableViewController.view.frame = wordlistContainerView.bounds;
    wordlistTableViewController.view.autoresizingMask = wordlistContainerView.autoresizingMask;
    [self addChildViewController:wordlistTableViewController];
    [wordlistContainerView addSubview:wordlistTableViewController.view];
    [wordlistContainerView bringSubviewToFront:wordlistTableViewController.wordlistTableView];

    [wordlistTableViewController didMoveToParentViewController:self];

    return wordlistTableViewController;
}

そして、どのボタンが押されたかに応じて、それを呼び出すメソッド:

- (IBAction)slideUserWordlistView:(id)sender {
    if(!self.userWordlistTableViewController){
        [self setupWordlistTableViewController:@"user"];
    }

    // (sliding drawer code here)
}

または:

- (IBAction)slideOpponentWordlistView:(id)sender {
    if(!self.opponentWordlistTableViewController){
        [self setupWordlistTableViewController:@"opponent"];
    }

        // (sliding drawer code here)
}

私がやっていることは、SlidingVC を含むビューをスライドさせることです。2 人のユーザーごとに 1 つずつ、合計 2 つ持っています。それぞれのボタンが押されると、それぞれの SlidingVC が存在するかどうかを確認し、存在しない場合はインスタンス化してから、slingViewContainer に追加します。

4

0 に答える 0