2012-01-04 14 views
2

NSManageObjectをデリゲートに保存しようとすると多くの問題があり、オブジェクトを読み込もうとすると最悪の問題が発生します。私が行うとき、最初のビューでNSManagedObjectをappDelegateに保存しようとしています

- (void) setCar:(Garage *)Car 
{ 
    car = Car; 
} 
- (void) setTrip:(Trips *)Trip 
{ 
    trip = Trip; 
} 
- (Trips *) gettrip 
{ 
    return trip; 
} 
- (Garage *) getcar 
{ 
    return car; 
} 

@class ViewController; 
@class RootViewController; 

@interface AppDelegate : UIResponder <UIApplicationDelegate> 
{ 
NSManagedObjectModel *managedObjectModel; 
NSManagedObjectContext *managedObjectContext; 
NSPersistentStoreCoordinator *persistentStoreCoordinator; 
Trips *trip; 
Garage *car; 
} 

@property (strong, nonatomic) UIWindow *window; 

@property (strong, nonatomic) ViewController *viewController; 
@property (strong, nonatomic) RootViewController *rootviewcontroller; 

@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel; 
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext; 
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator; 
@property (nonatomic, retain) Trips *trip; 
@property (nonatomic, retain) Garage *car; 

- (NSString *)applicationDocumentsDirectory; 
- (void) setCar:(Garage *)Car; 
- (void) setTrip:(Trips *)Trip; 
- (Trips *) gettrip; 
- (Garage *) getcar; 

@end 

設定および取得するための完全な方法は、このようなものです: 私の代理人は、このようなものである

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
trip = (Trips *)[NSEntityDescription insertNewObjectForEntityForName:@"Trips" inManagedObjectContext:context]; 
[appDelegate setTrip:trip]; 

がいるようです私がNSLog(@ "%@"、[appDelegate gettrip])をしてもOKです。それは私に問題のないオブジェクトを示しています。しかし、他のビューで[appDelegate gettrip]を使って同じ旅行を読むと、実際にはNSLogでは、Tripsの代わりにGarageタイプのオブジェクトが表示されます。

私は何が間違っているのか分かりません。助けて。

+0

' - [NSEntityDescription insetNewObjectForEntityForName:inManagedObjectContext:]'は 'id'を返します。したがって、返すオブジェクトをキャストする必要はありません。 –

+0

なぜrigmaroleのメソッドを実装し、旅行と車のプロパティのメンバー変数を宣言するのですか?それは混乱し、問題の原因となる可能性があります。オブジェクトをプロパティに設定するだけで、すべてがあなたのために処理されます: 'appDelegate.trip = trip'と' appDelegate.car = car'。 – Jeremy

+0

ありがとうございましたJeremy私はあなたが言ったし、それは良いですが、それは私の問題はNSManagedObjectContextであるように思えます、私はデータを保存しているので、[コンテキストリセット]を追加するyを保存することができますが、代議員。私は[文脈のやり直し]でも試してみるが、うまくいきません。変更を保存するか、出張先を代理人に保存します。私は両方をすることはできません。 –

答えて

3

アイテムの作成後にコンテキストを保存するようにしていますか?あなたがそれを保存しなければ、私はあなたの新しいエンティティが適切に保存されているとは思わない。コードでは、単にコンテキスト内のオブジェクトを作成されていますが、その永続性のためのコンテキストを保存する必要があります。

NSError *error = nil; 
if(![self.managedObjectContext save:&error]){ 
    //Handle error 
} 

私はこれが役に立てば幸い!

+0

保存は重要ですが、これはエンティティを保存しているので保存問題のようには聞こえませんプロパティで。このコードでは、ただの別のオブジェクトです。保存を強制するフェッチなど何もありません。 –

+0

私はあなたが言ったことを試してみるが、それはうまくいきません。実際、私は保存した同じビューのデータにアクセスしようとします。 –

+0

おそらくゾンビをオンにして、旅行がどこかで割り当て解除されているかどうかを確認できます。 – tams

0

保存するオブジェクトを作成しているときに、実際にオブジェクトを永続ストレージに保存しているように見えません。

はこれを試してください:あなたは他のビューでmanagedObjectを読むとき

if (![managedObjectContext save:&error]) { 
    NSLog(@"ERROR: %@", [error userInfo]); 
} else { 
    NSLog(@"EVERYTHING SHOULD HAVE SAVED PROPERLY"); 
} 

は今それがあるはずです。

+0

保存は重要ですが、プロパティにエンティティを格納しているので、保存上の問題のようには聞こえません。このコードでは、ただの別のオブジェクトです。保存を強制するフェッチなど何もありません。 –

+0

私はあなたが言ったことを試してみるが、それはうまくいきません。実際、私は保存した同じビューのデータにアクセスしようとします。 –

1

NSLogが別のオブジェクトを報告している場合は、Garageエンティティを作成する場所を確認する必要があります。

おそらく単純なコピー&ペーストエラーがありますか?

0

カスタムセッターのメモリ管理の問題ですか?

彼らは

- (void)setTrip:(Trip *)Trip { 
    self.trip = Trip; 
} 

すなわちself.trip =だけではなくtrip =プロパティを使用するようにする必要がありますか - そう、私はそれがあなたの旅行のオブジェクトを保持し、それが自動解放されますとは思いません。次に、後でそれを使用するようになると、他の何かがそのメモリ位置にあります。

免責事項 - まだ100%ARCではないので間違っている可能性があります。それは試してみる価値がある!

+0

ありがとう、私はそれを試みますが、クラッシュします:/。 –

+0

'クラッシュ'は非常に有用なメッセージではありません。どのようにクラッシュしますか?それはどこでクラッシュするのですか?スタックトレースは何時ですか? – deanWombourne

+0

私の答えは申し訳ありませんが、それは問題ではありません。私の問題はNSManagedObjectContextであるようですが、データの保存に問題があり、[コンテキストリセット]を追加すると保存できますが、デリゲートに保存されたデータは失われてしまいます。私は[文脈のやり直し]でも試してみるが、うまくいきません。変更を保存するか、出張先を代理人に保存します。私は両方をすることはできません。 –

関連する問題