1

私はこれを理解できません。誰かが助けてくれることを願っています。

これは、ViewController.h ファイルのコードです。

{
NSArray *bgImages;
int currentBackground;
bool hasShrunk;
bool hasMoved;

CGAffineTransform translate;
CGAffineTransform sizeShrink;
CGAffineTransform sizeGrow;
}

ViewController.m ファイルのコードの一部を次に示します。

- (void)viewDidLoad {
hasMoved = NO;
hasShrunk = NO;
currentBackground = 0;

bgImages = [[NSArray alloc] initWithObjects:
        [UIImage imageNamed:@"WallPaper_01.png"],
        [UIImage imageNamed:@"WallPaper_02.png"],
        [UIImage imageNamed:@"WallPaper_03.png"],
        [UIImage imageNamed:@"WallPaper_04.png"],
        [UIImage imageNamed:@"WallPaper_05.png"],
        nil];

sizeShrink = CGAffineTransformMakeScale(.25,.25);
sizeGrow = CGAffineTransformMakeScale(1,1);

_myBackground.image = [bgImages objectAtIndex:currentBackground];
}

これが問題です。このコードとプロジェクト全体がシミュレーターで問題なく動作します。出力を実際の iPhone デバイスに変更すると失敗します。bgImages という配列の割り当てでコードが失敗しています。viewDidLoad にブレークポイントを配置して行ごとにステップ インすると、配列割り当て行まで実行されてからジャンプします。次に、行を実行しようとすると:

_myBackground.image = [bgImages objectAtIndex:currentBackground];

配列が空であるため、失敗します。これがシミュレーターでどのように機能するのかわかりませんが、実際のデバイスでは機能しません。コードは間違っているようには見えませんが、なぜこのように動作するのかを理解しようとしています。間違ってコーディングしましたか?

4

2 に答える 2

4

配列に要素が含まれていないため、問題が発生しています。1 つの可能性は、すべての[UIImage imageNamed:...]呼び出しが戻ってくることnilです。これらの 1 つを個別の変数として分割します。

UIImage *firstImage = [UIImage imageNamed:@"WallPaper_01.png"];

その行にブレークポイントを設定して、イメージが正しく初期化されていることを確認します。そうでない場合、考えられる理由の 1 つは、2x バージョン ( WallPaper_01@2x.png) を持っているが 1x バージョンを持っていない、またはその逆であることが考えられます。

編集: @rdelmarが指摘しているように、別の考えられる理由は、Mac OS Xは(デフォルトで)大文字と小文字を区別しないファイルシステムを使用しますが、iOSは大文字と小文字を区別するファイルシステムを使用するため、間違ったファイル名を使用していますが、表示されているだけですOS X はファイル名が正確でなくても気にしないため、iOS では問題です。

于 2013-05-22T15:33:49.567 に答える
0

すべての画像を読み込んでから、1 つだけを使用しているようです。これにより、実際のデバイスでメモリの問題が発生する可能性があります。あなたがやりたいことは、このようなものです。

bgImages = [[NSArray alloc] initWithObjects:
            [@"WallPaper_01.png"],
            [@"WallPaper_02.png"],
            [@"WallPaper_03.png"],
            [@"WallPaper_04.png"],
            [@"WallPaper_05.png"],
                             nil];   
...
_myBackground.image = 
     [UIImage imageNamed:[bgImages objectAtIndex:currentBackground]];

また、大文字と小文字の区別に関する @rdelmar のコメントもご覧ください。

于 2013-05-22T15:37:38.310 に答える