2012-01-30 5 views
2

をクラッシュさせるRestkitとコアデータに削除したオブジェクトを保存NSManagedObject:後に、それは私が作成した私は、サーバー側件のデータのローカルキャッシュとしてRestKitとコアデータを使用しようとしているが、私はそれを</p> <p>を行うために管理することができない

@interface JSONShop : NSManagedObject 

@property (nonatomic, retain) NSNumber * shopId; 
@property (nonatomic, retain) NSNumber * type; 

@end 
@implementation JSONShop 

@synthesize shopId; 
@synthesize type ; 

@end 

それは自動的にマッピングされRestkitによって記憶され、そしてIはTableViewControllerに表示するためにデータベースから取得することができています。

私は、たとえば、(私のマッピングに定義されている)私のテーブルの主キーを持っている:

shopMap.primaryKeyAttribute = @"shopId" ;   

私が初めての私のオブジェクトを格納すると、すべてが大丈夫です:)

後、ときRestkitは再びそれをマッピングして、もう一度それを保存しようとすると、私は、コンテキスト内のすべてのエンティティを削除しますが、私はこのエラーを取得する:あなたは、なぜ

'CoreData could not fulfill a fault for '0x9412ea0 <x-coredata://F8451322-3890-430F-8ABD-B5EEF1DFED2F/JSONShop/p177>'' 

知っていますか?

は、ここに私の削除コードです:

- (void) deleteAllObjects: (NSString *) entityDescription  { 

    NSLog(@"Deleting %@",entityDescription); 

    NSManagedObjectContext * managedObjectContext = [[RKObjectManager sharedManager].objectStore managedObjectContext] ; 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:entityDescription inManagedObjectContext:managedObjectContext]; 
    NSError * error ; 
    [fetchRequest setEntity:entity]; 

    NSArray *items = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; 

    for (NSManagedObject *managedObject in items) { 
        [managedObjectContext deleteObject:managedObject]; 
    } 
    if (![managedObjectContext save:&error]) { 
        NSLog(@"Error deleting %@ - error:%@",entityDescription,error); 
    } 

} 
+0

削除とダウンロード/保存は同じスレッドで実行されていますか? – shawnwall

+0

私はそう考えています、この順番でMainThreadで作業が行われていると思います。1.コアデータにデータを格納するRestkitを使ってフェッチする2.手動でデータを削除する3. Restkit =>クラッシュで再度フェッチする – Julien

+0

そして、これら? – shawnwall

答えて

1

ですから、あなたのデータを取得するためにRestkitを使用して、CoreDataモック内のデータを保存するためにRestKitを使用しています。

実際にディスクへの変更をどこに保存しているのかわかりません。

RestKitを使用してオブジェクトを取得してから削除してみませんか?すなわち

- (IBAction)deleteAllButtonClicked:(id)sender { 

    NSArray* objects = [JSONShop findAll]; 
    for (JSONShop *object in objects) { 
     [[JSONShop managedObjectContext] deleteObject:object]; 
    } 
    NSError* error = nil; 
    [[JSONShop managedObjectContext] save:&error]; 
    if (nil != error) { 
     // Error checking here... 
    } 
} 

この例のプロジェクトは類似しない:RestKit 0.10前lottadot-restkit-ios-rails3-1-advanced

+0

あなたの答えをありがとう、これは私が試みた解決の1つですが、同じ方法で失敗します... – Julien

0

、RKManagedObjectStoreは、すべての使用エンティティのキ​​ャッシュされたコピーを保っていました。しかし、エンティティがCoreDataから削除されたとき、オブジェクトはキャッシュに保持されました。後で、同じオブジェクトをCoreDataで作成するのではなく、そのオブジェクトをキャッシュからフェッチしました。私は正確に同じ問題があった 、CoreData validation error 1550

つのソリューションを参照してください。

  • をどちらの
  • (問題は店の大きなリワークの一部として固定されている)またはあなたの現在のRKManagedObjectStoreにパッチを適用RestKit 0.10へのアップグレードメモリ内キャッシュを無効にするには
関連する問題

 関連する問題