0

iOS 4.x用にビルドすると正常に動作するプロジェクトがありますが、iOS5.x用にビルドするとクラッシュして失敗します。明確にするために、4.xビルドはiOS 5.1で正常に実行されますが、5.0または5.1に対してビルドすると、以下に説明するクラッシュが発生します。

- (NSManagedObjectModel *)managedObjectModel
{
    if (__managedObjectModel == nil)
    {
        __managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];  //crash  
    }

    return __managedObjectModel;
}

私はドキュメントをチェックしました、そしておそらくnilパラメータに関して提供することはメインバンドルにデフォルトであることになっています。CoreDataで変更されたことが、これを引き起こす原因になるかどうか誰かが知っていますか?

その価値については、「分析」ツールを実行しましたが、メモリリークや異常な報告はありません。

4

2 に答える 2

1

私はなんとか回避策を思い付くことができました。新しいシングルビュープロジェクトを作成し、生成されたコードをコピーして、管理対象オブジェクトモデルを新しいプロジェクトに初期化しました。私の勘では[[NSManagedObjectModel mergedModelFromBundles:nil]、iOS 5.1 SDKでは動作が異なり、プロジェクトルートではなく別の「データ」フォルダに保存されていたため、データモデルを見つけることができなかった可能性があります。

- (NSManagedObjectModel *)managedObjectModel
{
    if (__managedObjectModel != nil)
    {
        return __managedObjectModel;
    }
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"PreferencesModel" withExtension:@"momd"];
    __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    return __managedObjectModel;
}
于 2012-09-15T17:00:00.720 に答える
0

実際にクラッシュについて説明したり、エラーメッセージを提供したりすることはありませんが、次のStackOverflowの質問には、クラッシュの解決策があります。

キャッチされなかった例外'NSInvalidArgumentException'が原因でアプリを終了しています、理由:'*-[__ NSArrayM insertObject:atIndex:]:オブジェクトをnilにすることはできません

于 2012-09-14T22:55:32.903 に答える