【问题标题】:App won't run on Xcode simulator but will run on iPhone应用程序不会在 Xcode 模拟器上运行,但会在 iPhone 上运行
【发布时间】:2014-01-02 00:12:47
【问题描述】:

我想知道是否有人遇到过这个问题。

这又回到了我的另一个问题,人们说代码不会无缘无故地突然开始工作。

我花了几个小时调试我的应用程序,检查每一行代码。如果我从 Xcode、模拟器或 iPhone 启动我的应用程序,它将无法运行。然而,当我在 iPhone 上启动我的应用程序而不通过 Xcode 时,它​​运行良好。

我尝试重新启动 Xcode,但同样的事情发生了。知道可能是什么原因造成的吗?

#import "CardGameViewController.h"
#import "Deck.h"
#import "PlayingCardDeck.h"
#import "PlayingCard.h"
#import "CardMatchingGame.h"

@interface CardGameViewController ()

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

@property (weak, nonatomic) IBOutlet UILabel *scoreLabel;
@end

@implementation CardGameViewController

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

    return _game;

}

-(Deck *)createDeck{
    return [[PlayingCardDeck alloc] init];
}

- (IBAction)touchCardButton:(UIButton *)sender {
    NSUInteger chosenButtonIndex = [self.cardButtons indexOfObject:sender];
    [self.game chooseCardatIndex:chosenButtonIndex];
    [self updateUI];
}


-(void)updateUI{
    for (UIButton *cardButton in self.cardButtons){
        NSUInteger cardButtonIndex = [self.cardButtons indexOfObject:cardButton];
        Card *card=[self.game cardAtIndex:cardButtonIndex];
        [cardButton setTitle:[self titleForCard:card] forState:UIControlStateNormal];
        [cardButton setBackgroundImage:[self backgroundImageForCard:card] forState:UIControlStateNormal];
        cardButton.enabled = !card.isMatched;
        self.scoreLabel.text = [NSString stringWithFormat:@"Score: %d", self.game.score];

    }

}

-(NSString *)titleForCard:(Card *)card {
    return card.isChosen ? card.contents : @"";
}

-(UIImage*) backgroundImageForCard:(Card *)card{
    return [UIImage imageNamed:card.isChosen ? @"cardFront" : @"cardBack"];
}
@end

有一个断点

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

在调试器中显示-0 [CardGameViewController setCardButtons:]

我在控制台中的所有属性都显示为 nil。

【问题讨论】:

  • 我停用了断点,它成功了。为什么?

标签: ios objective-c xcode


【解决方案1】:

你在这一行设置了断点:

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

虽然我从未在我的代码中的这个位置设置断点,但我怀疑发生的情况是 setter 和 getter 都得到了断点。

就在“viewDidLoad”将在“CardGameViewController”中调用之前,XIB/storyboard 将被加载,UIButtons 的 IBOutletCollection 也将被加载。因此断点命中。

如果您关闭该断点,我认为您在设备和模拟器上启动应用程序的运气都会好得多。

【讨论】:

    猜你喜欢
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 2021-09-26
    • 2012-04-16
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    相关资源
    最近更新 更多