2016-05-19 9 views
0

私のフラッシュカードをテーマにしたアプリケーションではまだ動作しています。完全に困惑した。おそらく顕著な情報がたくさんあります。Xcodeプロジェクトは、デバイスではなくシミュレータで動作します

私は、シミュレータと複数のデバイスの両方で完璧に動作するバージョンを持っています。しかし、私はApp Storeに提出する際に間違いを犯しました(バンドルIDと名前が間違っている)ので、新しいプロジェクトを作成し、コードとストーリーボードをコピーして貼り付けました。 (私はファイルを移動しただけではなく、コードを再作成してコードをコピーしました)

最初の問題は、 "duplicate symbol _answers in RootViewController.o"とDescendantViewController.oのために作成されないということでした。そしてそのような重複した記号が3つあった。

はい、私はRootVCとDescedantVCの両方の実装にはNSMutableArray *answersを宣言しています。だから、容認しているとは限りません。それは動作するバージョンとまったく同じコードです。

しかし、自分のコードをクリーンアップする機会があるので、私は@property (weak, nonatomic) NSMutableArray *answersをRootVCに作成し、ルートと子孫のView Controllerのコードをself.answersに変更しました。それは問題なくコンパイルされます。

これはシミュレータで完全に動作します。コードベース全体を新しいプロジェクトにコピーしたので、私はすべてをテストします。問題はありません。私は非常に興奮しているので、最後に "レビューのために提出する"を除いてApp Storeに提出するすべての手順を実行します。

私は自分のiPhone 6を取り付けてコンパイルして実行し、「再生」を選択するとクラッシュします。

次の行が原因です。シミュレータおよびデバイスの両方

answers = [self pickWrongAnswersIgnoringCard:questionCard];

は、この方法の最後の行である。いずれの場合も

return wrongAnswers;

は、wrongAnswers 3つのアイテムを持つ配列です。

シミュレータでは、answersにも3つの項目があります。私のiPhoneでは、answersはゼロです。

これはどういう考えですか?私が考えることができるのは、1年以上前に動作するプロジェクトと今日失敗するプロジェクトを作成したことです.2つのプロジェクトのApple設定の一部が異なる可能性があります。それ以外の場合、私は困惑しています。

誰かが考えてくれることを願っています。

ありがとうございました。

P.S.私はStackOverflowで他の記事を見てきましたが、誰も私を助けませんでした。

EDIT:機能、要求通り:

-(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 
} 
+0

あなたはwrongAnswersの返品を受けているところに投稿してください。 – Siriss

+0

デバッグバージョンでゾンビを有効にしましたか? – bneely

+0

あなたが犯人であると指摘した行は、少なくともそれ自身ではなく、クラッシュを引き起こすべきではありません。実際に何が失敗していますか? (スタックトレース?) –

答えて

0

私は、私は完全には理解していない場合でも、それを考え出しました。

@property (weak, nonatomic)から@property (strong, nonatomic)に変更されました。

それは私のためにそれを解決しました。

シミュレータとデバイスの両方で動作します。

+0

メモリ管理のバグは、コードをどこで実行するかによって異なる場合があります。 –

関連する問題