2013-02-26 12 views
7

以下のコードはエンティティを削除しません。エンティティが見つかるようにコンソールに「削除が成功しました」というメッセージが表示されます。他のすべての操作は成功します。RestKitを使用してコアデータからエンティティを削除できません0.20

私はRestKit 0.20を使用しています。

NSManagedObjectContext *context = [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext; 
NSError *error = nil; 

NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setEntity: [NSEntityDescription entityForName:@"Auction" inManagedObjectContext:context]]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"AuctionID = %d", auctionID]; 
[fetchRequest setPredicate:predicate]; 

NSArray *result = [context executeFetchRequest:fetchRequest error:&error]; 
if(result.count) { 
    Auction *block = result[0]; 
    [context deleteObject:block]; 
    BOOL status = [context save:&error]; 
    if (status == NO) { 
     NSLog(@"delete falied for AuctionID:%d, error: %@", auctionID, error); 
    } 
    else { 
     [context processPendingChanges]; 
     NSLog(@"delete was successful for AuctionID:%d", auctionID); 

    } 
} 

なぜこの削除操作が成功しないのか、それを機能させるための解決策は何か。

+0

インスタンスを削除した後、どこに表示されますか? –

+0

私は、シミュレータの* .sqliteファイルにサードパーティのツール "Base"を使用しています。このツールでエンティティを削除できます。 – zaph

+0

私は実際に問題の症状が何であるか、それが起こるのを見ているのかと疑問に思っていました。あなたはあなたがあなたが削除したと思ったアイテムをいつ見ているので、データの削除に問題があると言いましたか? –

答えて

5

を共有している場合、私はこの解決策を見つけた

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyModel"]; 
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"id" ascending:NO]; 
fetchRequest.sortDescriptors = @[descriptor]; 

// Setup fetched results 
NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                     managedObjectContext:[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext 
                      sectionNameKeyPath:nil 
                        cacheName:nil]; 

// AND TO DELETE A MODEL : 

[[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext deleteObject:myobject]; 
+0

ありがとう:)あなたがより良い解決策を見つけたら、それを目的に躊躇しないでください – Sebastien

+0

これは問題を解決します。問題はコンテキストであり、 '[RKManagedObjectStore defaultStore] .persistentStoreManagedObjectContext'は正確な修正です。 – zaph

2

私は同じことをしており、ほぼ同じコードを持っています。 私のコードでも、私は削除を完了し、保存します....

しかし、私はDBをチェックしているときに削除されません。

問題はシミュレータではありません...確かに私はデバイス上で同じ問題を抱えています。 子のコンテキストと呼ばれるものがありますが、それが原因かもしれません...これらのリンクを確認してくださいhttp://restkit.org/api/0.20.0-dev/Classes/RKManagedObjectRequestOperation.html#//api/name/managedObjectContext RestKit 0.20 — What is the preferred way to create a new NSManagedObject? 。実際に

、あなたは現在の作成、管理コンテキストpersistentstoreから件のデータを取得していないする必要があります:あなたは解決策を見つけたplsはここ

+0

同じエラー、任意のアイデアですか? – Sebastien

+0

あなたはアプリを停止した後、あなたがデータベースをチェックしていることを確認してください。変更が接続されていない限り反映されないためです。だから、削除 - >切断してチェックしてください。私の場合は、このようにチェックしてもまだ削除されていませんでした。そして、はい、私はそれを明示的に削除することができましたが、それは間違っています、それはRestkitだけによって削除されるべきです。あなたの誰かがここに投稿するソリューションplsを得た場合 – Sumitiscreative

2

@Sumitiscreativeを私は走りました今日は同じ問題になっています。あなたが使用する必要があるコアデータを通常使用していた場合はどうなりますか?

[NSManagedObject save:] 

変更を保存するにはどうすればいいですか?私はRestkitを介してビットを掘って上記の削除方法は、DBの外にオブジェクトを削除するために働いた後、これを呼び出すと、この

[[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext deleteObject:(NSManagedObject *)]; 
[[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext saveToPersistantStore:(NSError *)]; 

を見つけました。

**編集は - また、私はちょうどこのコメント作られているだろうが、私はねえ、plsは最新バージョンを使用してrestkitを更新オプション

1

@Lanceを ありません。 サーバーの設定が正しい場合、これは最新のバージョンで動作します。サーバーからの削除要求の成功コードを取得した場合。その後、restkitは自動的にデータを削除します。

外部からデータを削除する必要がある場合は、persistentStoreManagedObjectContextを使用して削除後に保存できます。

また、Restkit経由で正しく削除されているかどうかを確認したい場合は、あなたができることは...

メイク削除要求、成功後 アイテムがある場合は同じIDでチェックしてください。

関連する問題