应用程序不会在 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 上运行的主要内容,如果未能解决你的问题,请参考以下文章
Python不会在bash中运行,但会在cmd中运行[重复]
运行多启动应用程序不会在发布时停止应用程序,但会在调试时停止它们