gpt4 book ai didi

ios - 方法没有被调用但在我构建时没有错误

转载 作者:行者123 更新时间:2023-11-28 20:04:12 25 4
gpt4 key购买 nike

我正在学习 Stanford ios 7 类(class)(在第三讲中),其中讲师构建了一个纸牌配对游戏。屏幕上有十二张卡片,它们与 ViewController 中的这个属性相关联

@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *cardButtons;

当任何一个按钮被点击时,这个方法就会被触发

- (IBAction)touchCardButton:(UIButton *)sender {
NSLog(@"touchCardbutton");

int cardIndex = [self.cardButtons indexOfObject:sender];
[self.game chooseCardAtIndex:cardIndex];
[self updateUI];

}

在 viewController 中触发 updateUI

- (void)updateUI{
NSLog(@"updateUI");
for (UIButton *cardButton in self.cardButtons){
int index = [self.cardButtons indexOfObject:cardButton];
NSLog(@"index in UpdateUI %d", index);
Card *card = [self.game cardAtIndex:index];
NSLog(@"card in UpdateUI %@", card);
[cardButton setTitle:[self titleForCard:card ]forState:UIControlStateNormal];
[cardButton setBackgroundImage:[self backgroundImageForCard:card] forState:UIControlStateNormal];
cardButton.enabled = !card.isMatched;

}
}

在这个 updateUi 方法中,第二个 NSLog 语句显示 card 为 nil。第一个 NSLog 语句显示 index 没有问题。那么为什么 card 为零呢?我假设 View Controller 中此属性引用的 cardMatchGame 类中的 cardAtIndex 方法存在一些问题

来自 View Controller @property (strong, nonatomic) CardMatchingGame *game;

卡片索引

-(Card *)cardAtIndex:(NSInteger)index
{
NSLog(@"cardAtIndex %d", index);
return (index < [self.cards count]) ? self.cards[index] : nil;


}

此 NSLog 语句未显示在控制台中,因此当我在 updateUI 中调用 cardAtIndex 时似乎没有发生任何事情

Card *card = [self.game cardAtIndex:index];

您能解释一下为什么 cardAtIndex 方法可能没有被调用,而我在构建和运行时也没有错误消息吗?

更新

在 View Controller 中,游戏属性是这样延迟实例化的

-(CardMatchingGame *)game
{
if (_game) _game = [[CardMatchingGame alloc] initWithCardCount:[self.cardButtons count] usingDeck:self.createDeck];

return _game;
}

最佳答案

你的 self.game 引用是 nil 所以没有调用。不会引发警告/错误,因为调用 nil 被定义为不执行任何操作。

您的问题似乎源于访问器方法中的逻辑问题,应该是:

- (CardMatchingGame *)game
{
if (!_game)
_game = [[CardMatchingGame alloc] initWithCardCount:[self.cardButtons count] usingDeck:self.createDeck];

return _game;
}

注意添加 !

通常最好不要走捷径并使用 if (!something) 而是明确使用 if (something == nil) 因为它更清晰、更容易理解发生了什么事。

关于ios - 方法没有被调用但在我构建时没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22647961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com