6
votes

Comment supprimer tous les objets des données de base

Comment puis-je supprimer tous les objets? Je sais que je peux enlever un par xxx

est-il possible de supprimer tout sans itération de tous les matrices? merci


7 Réponses :


2
votes

juste itérer le tableau et les supprimer. Il n'y a pas de méthode définie pour les supprimer tous.


1 commentaires

Ok, merci, espérons qu'ils nous fourniront une meilleure façon de le faire à l'avenir :)



6
votes

Vous pouvez également démolir la pile (relâchant le nsmanagedObjectContext , nspersistentStore et nsmanagedObjectmodel ) et supprimez le fichier. Serait probablement plus rapide que itérant sur toute votre base de données et supprimer chaque objet individuellement.

En outre, il est peu probable qu'ils fournissent cette fonctionnalité à l'avenir car il est facile de supprimer le fichier. Toutefois, si vous estimez qu'il est important, déposez un radar et laissez Apple savoir. Sinon, ils ne sauront pas combien de personnes veulent cette fonctionnalité.


0 commentaires

8
votes

Marquez des objets pour la suppression, puis sauvegarder les travaux de la manière dont les données de base doivent toujours exécuter les règles de validation de tous les objets supprimés. Après tout, un objet peut refuser la suppression basée sur la manière dont il répond à -Validatefordelete: .

Si:

  • Vous voulez vraiment supprimer tout dans un magasin persistant
  • et vous ne vous souciez pas de savoir si les objets dans ce magasin persistant disent qu'ils sont valables pour la suppression

    ALORS:

    • Detez la pile de données de base qui utilise ce magasin persistant
    • et supprimez le fichier du magasin persistant.

0 commentaires

8
votes

C'est ce que je fais pour "réinitialiser" mon magasin de données: xxx


4 commentaires

+1 pour presque pas de notation de points. Bon travail. En outre, supprimez les appels de libération si vous avez besoin d'une mise en œuvre de l'ARC.


Merci. J'ai posté une version modifiée qui utilise -PerformBlockandwait:


@stifin: y a-t-il un moyen dans lequel je peux réinitialiser les données de toutes les entités sauf une de l'URL de magasin ?? Par exemple: disons que nous avons 3 entités A, B et C. Je souhaite réinitialiser les données dans A et B, mais pas C. C devrait être restée la même. Quoi qu'il en soit dans lequel cela peut être mis en œuvre?


@Asn Cette solution implique la suppression de l'ensemble du fichier contenant toutes les entités. Vous ne pouvez pas supporter partiellement un fichier: c'est complètement parti ou ce n'est pas le cas. Dans ce cas, vous devrez trouver un moyen de stocker une entité C ailleurs avant de supprimer le magasin de données.



12
votes

Cette fonction supprime le fichier DB SQLite actuel du disque et en crée une nouvelle. C'est beaucoup plus rapide que tout Supprimer itératif. XXX

Si vous souhaitez appeler ce délégué de l'application extérieure (en supposant que l'intégration de la chaudière Coredata), vous pouvez utiliser Ce pour faire référence à votre délégué de votre application: xxx

n'oubliez pas d'importer l'en-tête .


1 commentaires

Rapide et simple - je l'aime, merci de partage ;-)



1
votes

Lorsque vous supprimez tout le cache et les documents, vous supprimez la base de données. Nécéraire appel à GestionedObjectContext

NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSArray *caches = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSMutableArray *paths = [NSMutableArray array];
[paths addObjectsFromArray:documents];
[paths addObjectsFromArray:caches];
for (NSUInteger i = 0; i < [paths count]; i++) {
    NSString *folderPath = [paths objectAtIndex:i];
    NSLog(@"Attempting to remove contents for: %@", folderPath);
    //Remove all cached data in the local app directory
    NSArray *dirContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:folderPath error:&error];
    for (NSString *strName in dirContents) {
        [[NSFileManager defaultManager] removeItemAtPath:[folderPath stringByAppendingPathComponent:strName] error:&error];
        if (error != nil) {
            NSLog(@"Error removing item: %@ : %@", strName, error.description);
        } else {
            NSLog(@"Removed item: %@", strName);
        }
    }
}


0 commentaires

0
votes

J'ai utilisé le code de STIFIN et mis à jour pour utiliser -PerformBlockandWait: xxx


0 commentaires