0

CoreData を保存しようとして問題が発生しています。以前に CoreData を使用したことがあり、通常はこれらの問題に遭遇しません。誰かが次のコードの何が問題なのか教えてもらえますか:

MapEntity *mapEntity = [_fetchedResultsController objectAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]];

NSMutableSet *set = (NSMutableSet *)mapEntity.points;
[set removeObject:self.selectedPoint];

self.selectedPoint = nil;
[[Singleton sharedSingleton] saveContext];

取得した結果を制御して初期化するには、次を使用します。

NSEntityDescription *entity = [NSEntityDescription entityForName:@"MapEntity" inManagedObjectContext:[[Singleton sharedSingleton] managedObjectContext]];

したがって、返されるエンティティは、シングルトンで管理されているオブジェクト コンテキスト内にある必要があります。saveContext のコードは次のとおりです。

- (void)saveContext
{
    NSError *error = nil;
    NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
    if (managedObjectContext != nil) {
        if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
            NSLog(@"Unable to save context");
    }
    }
}

オブジェクトの削除後に mapEntity.points を確認すると、オブジェクトが削除されていることがわかります。アプリを再起動するまでオブジェクトは再表示されないため、永続性の問題である必要があります。私は完全に困惑しているので、誰でも私のコードの何が問題なのかを理解できますか。

4

1 に答える 1

1

オブジェクトを削除する方法に問題があったようです。代わりに、CoreData によって作成されたセット削除関数を使用しています。同じ問題を抱えている他の人のために、以下のコードを使用しています。

MapEntity *mapEntity = [_fetchedResultsController objectAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]];

    NSSet *removeSet = [NSSet setWithObject:self.selectedPoint];
    [mapEntity removePoints:removeSet];

    self.selectedPoint = nil;
    [[Singleton sharedSingleton] saveContext];
于 2013-07-17T09:57:41.300 に答える