7

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

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);

    }
}

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

4

4 に答える 4

5

私はこの解決策を見つけました:

実際、現在作成されているマネージド コンテキストではなく、persistentstore からデータをフェッチする必要があります。

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];
于 2013-03-14T08:42:12.713 に答える
2

@Sumitiscreative 今日も同じ問題に遭遇しました。通常、コアデータを使用する必要があることがわかった場合はどうなりますか

[NSManagedObject save:] 

変更を保存するため。私はRestkitを少し掘り下げて、これを見つけました

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

上記の削除メソッドの後にこれを呼び出すと、DB からオブジェクトが削除されます。

**編集 - また、これをコメントにしましたが、オプションがありません

于 2013-07-03T19:40:47.220 に答える
2

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

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

問題はシミュレーターではありません...確かにbczデバイスでも同じ問題が発生しています。子コンテキストと呼ばれるものがあり、それが原因である可能性があります...これらのリンクを確認してくださいhttp://restkit.org/api/0.20.0-dev/Classes/RKManagedObjectRequestOperation.html#//api/name/managedObjectContext RestKit 0.20 —  新しい NSManagedObject を作成するための推奨される方法は何ですか? . 解決策が見つかった場合は、ここで共有してください

于 2013-03-12T11:36:00.780 に答える
1

@Lanceちょっと、レストキットを最新バージョンに更新してください。サーバー関連の構成が正しい場合、これは最新バージョンで機能します。サーバーからの削除リクエストの成功コードを取得した場合。その後、restkit は自動的にデータを削除します。

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

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

アイテムが存在する場合、同じ ID での成功チェックの後、削除要求を行います。(ただの助けです)

于 2013-07-08T08:07:20.623 に答える