Xcode 项目在模拟器中运行,而不是在设备上运行

Xcode project works in Simulator, not on device

仍在开发我的闪存卡主题应用程序。完全莫名其妙。很多可能重要的信息。

我有一个版本可以在模拟器和多个设备上完美运行。但是,我在提交到 App Store 时出错(错误的 Bundle ID 和名称),所以我创建了一个新项目并复制并粘贴了代码和故事板。 (我不只是移动文件;我重新创建了它们并复制了代码。)

第一个问题是它无法构建,因为“重复符号 _answers in”RootViewController.o 和 DescendantViewController.o。并且有3个这样的重复符号。

是的,我已经在我的 RootVC 和 DescedantVC 的实现中声明了 NSMutableArray *answers,所以我承认这是可疑的,除了......它与有效版本中的代码完全相同。

尽管如此,我看到了清理代码的机会,所以我在我的 RootVC 中创建了一个 @property (weak, nonatomic) NSMutableArray *answers,并将根视图控制器和后代视图控制器中的代码更改为引用 self.answers。它编译没有任何问题。

它运行在模拟器中完美。因为我刚刚将整个代码库复制到一个新项目中,所以我测试了所有内容——没问题。我非常兴奋,所以我完成了所有提交到 App Store 的步骤,除了最后一个“提交审核”。

我想向我的朋友炫耀,所以我附上我的 iPhone 6,编译它,运行 当我 select “播放”时 - 崩溃!

下面一行是罪魁祸首。

answers = [self pickWrongAnswersIgnoringCard:questionCard];

在模拟器和设备上,这个方法的最后一行是:

return wrongAnswers;

在这两种情况下,wrongAnswers 是一个包含 3 个项目的数组。

在模拟器中,answers也有3个项目。在我的 iPhone 上,answers 为零。

有人知道这是什么吗?我唯一能想到的是,我创建了一年多前有效的项目和今天失败的项目,所以这两个项目中的某些 Apple 设置可能不同?否则,我很难过。

编辑

请求的函数:

-(NSMutableArray *)pickWrongAnswersIgnoringCard:(FlashCard *)questionCard {
  NSMutableArray *wrongAnswers = [[NSMutableArray alloc] init];

  FlashCard *randomCard;

  for (int i=1; i<4; i++) {
    do {
      randomCard = [self pickARandomCardFromDeck:wrongAnswersSource];
    } while ([randomCard.name isEqualToString:questionCard.name] || [wrongAnswers containsObject:randomCard]);
    
    [wrongAnswers addObject:randomCard];
  }

  return wrongAnswers; // device or simulator, wrongAnswers.count = 3
}

我想通了,虽然我不完全明白。

我从@property (weak, nonatomic)变成了@property (strong, nonatomic)

这帮我解决了。

现在可以在模拟器和设备上运行。