2

古いバージョンのアプリがデバイスにインストールされています。私の新しいバージョンでは、複雑なものから単なるテーブル ビューに変更され、コードでインスタンス化できるため、.xib ファイルを使用しなくなりました。

ただし、デバイスをビルドして実行すると、古いアプリに含まれている .xib ファイルからコントローラーをロードしようとしてクラッシュし、UILabel のキーと値のペアが見つからないというエラーが表示されます。

例えば:

SomeViewController.h (UITableViewController)
SomeViewController.m
SomeViewController.xib (新バージョンで削除)

SomeViewController *controller = [[SomeViewController alloc] initWithStyle:UITableViewStylePlain];

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];

    if (self)
    {
    }

    return self;
}

「initWithStyle」を呼び出しても、既存の.xibをロードしようとします!

私の現在の解決策は、空白の UITableView で SomeViewController.xib を作成することです。

ただし、ユーザーがアプリ ストアからアプリを更新すると、アプリ全体が上書きされ、何も残らないのではないかと思います。

これは本当ですか?アプリの更新によって既存のアプリが上書きされますか、それとも .xib ファイルが残りますか?

ここで、他のすべてのビューで古いバージョンをテストして、他に問題が残っていないことを確認する必要があります。

NIB の開発者向けテキストを読む: http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html

おそらく私はバグを見つけましたか?

関連する .xib ファイルを自動的にロードしないように、クラスの名前を SomeController などの別の名前に変更することもできます。

4

2 に答える 2

2

Apple は、iOS アプリの更新のテストに関する次のテクニカル ノートでこの問題に対処しています。

テクニカルノート TN2285

于 2013-07-08T00:48:39.960 に答える
1

2 つの推奨事項:

  • テストに使用する Xcode とデバイスを再起動してみましたか? (私は、Xcode がキャッシュ管理を台無しにして、古いバージョンのファイルを使い続けているという長い記録を持っています)
  • XIB ファイルが別のファイルから参照されていないことを確認しますか? (おそらく、メイン ビューには、削除した XIB の名前を残したタブ バー コントローラーがあります)
于 2013-04-21T22:46:13.263 に答える