私のiPhoneアプリは3つのナビゲーションコントローラをロードするタブバーコントローラです。最初のビューはUIViewControllerで、2番目と3番目のビューはUITableViewControllerです。iPhoneのEXC_BAD_ACCESSは、タブバーのビューコントローラを変更した後に表示されます。
すべての私のアプリケーションでは、私はアプリケーションデリゲートに格納されているコアデータから来るオブジェクト "車"にアクセスします。私のタブバーの最初のナビゲーションコントローラビューを変更した後、私は3つのナビゲーションコントローラ(設定)内のオブジェクトにアクセスするときに常にEXC_BAD_ACCESSを取得します。デバッガは@synthesize userCar=_userCar;
にエラーを表示します。
私のアプリケーションで変更すると、私のタブバーの選択されたインデックスを変えると変です。だから、デフォルト(index = 0)をロードするとき、設定ビュー(index = 2)に入るとクラッシュしますが、最初に設定ビューをロードすると、いつでも私のアプリが大きく動いています。
クラッシュ:
// Display the window with the tab bar.
[self.window addSubview:[self.tabBarController view]];
[self.window makeKeyAndVisible];
MyAppDelegateクラスのロード場合はクラッシュしない:私は私のメインウィンドウでNIB名とクラス名をバックに変更する場合
// Loads the 3 view (Settings) to avoid crash...
[self.tabBarController setSelectedIndex:2];
// Display the window with the tab bar.
[self.window addSubview:[self.tabBarController view]];
[self.window makeKeyAndVisible];
は、だから私は、理解していません.xib(私のタブバーコントローラなどがあります)を以前のものに戻して、それは再び完全に動作します。私は、プロジェクトをクリーニングし、Xcodeを再起動し、シミュレータとデバイスからアプリケーションを削除してみましたが、何も動作しません。
ありがとう!
UPDATE 1
だから私はすべての私のビューコントローラでこの@property (nonatomic, retain) Car *userCar;
のように私の車のオブジェクトを宣言します。
次に、現在の車、利用者が選択された1つを得るために、私はこれを実行します。
// Get the latest user car selected.
self.userCar = [EcoAppAppDelegate userCar];
をユーザーが作成した場合、私は私のアプリデリゲートは、私は、私は車で遊んでみよう2つの機能を持っています新しいものはそれが自動的に保存されている、選択された別の車の設定でprevisoulyそれを保存するprevisouly選択した場合。アプリデリゲートの.mファイルで
+ (Car *)userCar;
+ (void)setUserCar:(Car *)newCar;
:コードの
// On top of the file.
static Car *_userCar;
#pragma mark - Static functions
+ (Car *)userCar
{
return _userCar;
}
+ (void)setUserCar:(Car *)newCar
{
if (_userCar != newCar) {
if (newCar != nil) {
[_userCar release];
_userCar = nil;
_userCar = [newCar retain];
}
else {
[_userCar release];
_userCar = nil;
}
}
}
最後のピース、私はコアデータから車を得るとき、私はそれがこの方法を行う(時.mファイルでアプリデリゲートdidFinishLaunchingWithOptions
で例えばアプリ)の開始:
// Load the car.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Car" inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:entity];
// Set predicate and sort orderings...
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"selected = 1"];
[fetchRequest setPredicate:predicate];
// Execute the fetch -- create a mutable copy of the result.
NSError *error = nil;
NSMutableArray *mutableFetchResults = [[self.managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy];
if (mutableFetchResults != nil && [mutableFetchResults count] > 0) {
// Get the car selected.
_userCar = (Car *)[mutableFetchResults objectAtIndex:0];
}
else {
// Handle error.
_userCar = nil;
}
// Memory management.
[fetchRequest release];
[mutableFetchResults release];
コントローラ2のCoreDataからオブジェクトを取得するコードを投稿する必要があります。おそらく問題がある場所です。 – PengOne
userCar変数の@propertiesは何ですか?また、3つのView Controllerからどのようにアクセスしますか? – Joe
私はコードを更新しました。十分ではないと私はもっと多くのものを追加することができます私に知らせてください。しかし、私はビューコントローラにカーオブジェクトを持っていて、アプリケーションデリゲートから読み込んでいます。その後、車の設定を変更すると(ユーザーが新しい車を作成して自動選択するか、以前に作成した別の以前の車を選択するだけで、アプリケーションのデリゲートで車が更新されます)。 – Dachmt