0

私は最初のアプリケーションを開発していて、実際のデバイスでそれをテストする時が来ました。私はオフィスに古いiPhone3GSを持っていて、それを最新バージョンのIOSにアップデートしました。

iPhoneシミュレーターでアプリケーションを起動しようとすると、すべてがうまく機能します。しかし、その後、デバイスで起動しようとすると、アプリケーションが次のエラーでクラッシュします。

2012-09-13 14:16:01.556 MyFirstApp[1702:707] *** Terminating app due to uncaught
exception 'NSUnknownKeyException', reason: '[<__NSCFString 0x15e2e0> valueForUndefinedKey:]: 
this class is not key value coding-compliant for the key testKey.'

ビルド設定を確認しました。以下のとおりです。

ここに画像の説明を入力してください

また、IBで適切に設定または削除されていないいくつかの変数から発生する可能性があると聞きましたが、それについての警告はありません...

エラーに関係するビューで使用しているコードは次のとおりです。

@implementation HomeViewController {
    @private
    NSArray *_orders;
    __strong UIActivityIndicatorView *_activityIndicatorView;
}

@synthesize orderList = _orderList;

- (void)reload:(id)sender {
    [_activityIndicatorView startAnimating];

    [Order orderListWithBlock:^(NSArray *orders) {
        if (orders) {
            _orders = orders;
            [self.orderList reloadData];
        }
        [_activityIndicatorView stopAnimating];
    }];
}

- (void)viewDidLoad
{
    [self reload:nil];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Custom Cell Segment";
    static NSString *OtherCellIdentifier = @"Other Cell Segment";
    Order *o = [_orders objectAtIndex:indexPath.row];

    if ([o.testKey isEqualToString:@""]) {
        [SOME STUFF]
    }
    else {
        [SOME OTHER STUFF]
    }
}

エラーがどこから発生する可能性があるかを誰かが知っていますか?

ご協力いただきありがとうございます !

4

3 に答える 3

0

私はあなたがユーザーインターフェースを開発するためにインターフェースビルダーを使用していると思います、IBOutletの警告をチェックしてください、あなたはビューの名前を変更しました。また、ファイルの所有者も確認してください。

ありがとうございました

于 2012-09-13T12:38:01.120 に答える
0

キー値コーディングを使用してプロパティにアクセスしよtestKeyうとしているが、そのプロパティを持たないオブジェクトでアクセスしようとしている(より具体的には、文字列でアクセスしようとしている)。

どこで、なぜこれが発生するのか、あなたはコードを投稿していないので、私にはわかりません。

KVCを介して行われるアクセスがないかプロジェクトを確認しますtestKey(xibに何かを入れたことが原因である可能性もあります)。

于 2012-09-13T12:38:07.870 に答える
0

これは、シミュレーターとデバイスの違いではなく、Interface Builderに古いIBOutletがあり、それ以降に削除したためですが、接続はXIBに残っています。古いIBOutlet「testKey」接続があるXIBを開いて、接続を削除するだけです。

これまでアプリがシミュレーターで動作した理由は、XIBが再コンパイルされていないか、ソースから削除した古いXIBが以前のビルドのビルド製品に残っているためです。

したがって、プロジェクトを完全にクリーンアップし、ビルドディレクトリを削除して最初から再構築すると、シミュレータでも同じ問題が発生するため、プロジェクトを再現してデバッグできると思います。

これを行うには、[製品]メニューから[クリーン]を実行するか、このメニューを開いて[ビルドフォルダーのクリーン...]を選択するときにオプションキーを古くします。とにかく十分でない場合もあるので、代わりにFinderからビルドフォルダ全体を削除することができます。

  • オーガナイザーを開きます(メニュー[ウィンドウ]-> [オーガナイザー])
  • 上部の[プロジェクト]タブを選択し、左側でプロジェクトを選択します
  • 「派生データ」ゾーンの横にある「削除」ボタンをクリックします。

これにより、ビルド出力ディレクトリが削除されるため、次にプロジェクトをビルドするときに、すべてを最初から再コンパイルします。

そこから、XIBファイルに警告が表示され、アプリケーションがシミュレーターでもクラッシュすることがわかります。これは、デバイスが原因のクラッシュではなく、以前のビルドがビルドを台無しにしたためです。応用。また、デバイスとシミュレータの両方で、このクラッシュを修正できます(XIBの古い「testKey」アウトレット接続を削除することにより)。

于 2012-09-13T12:38:14.007 に答える