属性设置然后在init中重置

时间:2013-04-09 05:42:15

标签: ios objective-c

这是我的SlidingVC标头中的属性声明,它是UITableViewController的子类:

@property (strong, nonatomic) NSString *user;

这是我的综合系列:

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

这是我的自定义初始化:

- (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:时,我看到_user在变量调试器窗口中占用了theUser的内存地址。我跳过return self然后到方法的结束},它仍然设置。但是,Xcode会再次返回return self,然后如果我跳过_user,它旁边就没有内存地址了,对于后面的方法,它仍然是null

为什么它会返回两次,然后第二次设置为null?


这是我的MainVC中实例化SlidingVC的方法:

- (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的视图。我有两个,一个用于两个用户。当按下每个相应的按钮时,我检查每个相应的SlidingVC是否存在,如果不存在,则实例化然后添加到slidingViewContainer。

0 个答案:

没有答案