应用程序不会在 Xcode 模拟器上运行,但会在 iPhone 上运行

Posted

技术标签:

【中文标题】应用程序不会在 Xcode 模拟器上运行,但会在 iPhone 上运行【英文标题】:App won't run on Xcode simulator but will run on 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。

【问题讨论】:

我停用了断点,它成功了。为什么? 【参考方案1】:

你在这一行设置了断点:

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

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

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

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

【讨论】:

以上是关于应用程序不会在 Xcode 模拟器上运行,但会在 iPhone 上运行的主要内容,如果未能解决你的问题,请参考以下文章

程序不能在 Win XP 上运行,但会在 Win7 上运行

Python不会在bash中运行,但会在cmd中运行[重复]

运行多启动应用程序不会在发布时停止应用程序,但会在调试时停止它们

Xcode 模拟器不工作

Fancybox 不会在 $(elem).click() 上触发,但会在“真实”点击时触发?

如何在 Xcode11 中的 Swift 中随机播放数组中的音频文件?