1

からエントリを削除する際に問題がありCore Dataます。

動作しますが、NSManagedObject データに値がない (障害) ため、間違ったエントリが削除されることがあります。

私のdeleteWholeDatabaseメソッドでは、オブジェクトに値が入力されています。また、deleteEntryFromDatabaseメソッドには値がありません。しかし、なぜ?

ここに私の方法があります:

-(NSArray*)databaseRequest{
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:currentEntity inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];
    [fetchRequest setReturnsObjectsAsFaults:NO];
    NSError *error;
    NSArray *items = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
    return items;
}

-(void)deleteWholeDatabase{
    for (NSManagedObject *objectToDelete in [self databaseRequest]) {
        [managedObjectContext deleteObject:objectToDelete];
        NSLog(@"%@ object deleted",objectToDelete);
    }
    [self saveContext];
    NSLog(@"All entries deleted!");
}

-(void)deleteEntryFromDatabase:(NSManagedObjectContext*)context forEntry:(NSIndexPath*)indexPath{
    NSManagedObject *objectToDelete=[[self databaseRequest] objectAtIndex:indexPath.row];
    [managedObjectContext deleteObject:[managedObjectContext objectWithID:[objectToDelete objectID]]];
    [self saveContext];
    NSLog(@"%@ deleted!",[managedObjectContext objectWithID:[objectToDelete objectID]]);
}
4

2 に答える 2

0

各リクエストが itens を異なる順序で返すため、間違ったエントリが削除されています。メモリアドレスを比較してインテンスを削除してみてください

于 2013-02-15T14:57:27.473 に答える
0

[self databaseRequest]どこでも呼び出しを保持する代わりにNSManagedObjectID's、配列として のローカル コピーを保持します。

- (void)init {
    self.entities = [self databaseRequest];
}

-(NSArray*)databaseRequest{
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:currentEntity inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];
    [fetchRequest setReturnsObjectsAsFaults:NO];
    NSError *error;
    NSArray *items = [managedObjectContext executeFetchRequest:fetchRequest error:&error];

    NSMutableArray *itemIDs = [[NSMutableArray alloc] initWithCapacity:[items count]];
    for (NSManangedObject *item in items) {
        [itemIDs addObject:[item objectID]];
    }

    return items;
}

次に、どこに電話[self databaseRequest]しても、正しい が得られますNSManagedObjectID。次に、ID から正しいエンティティを取得する必要があります。

于 2013-02-15T15:40:17.763 に答える