Базовые Данные: Самый Быстрый способ удалить все экземпляры объекта

Вы должны назначить j на 0 после печати каждого массива.

#include <stdio.h>

int main(){
    int i = 0;
    int j = 0;
    int doubleCharArray[2][7] = {{1,2,3,4,5,6},{7,8,9,10,11,12}};
    while(i < 2){

        while(j < 6){/* Replaced 7 to 6  */
            printf("%d ",doubleCharArray[i][j]);
            j++;
        }
        j = 0;/*  Added this, re-assigning j to 0 */ 
        i++; 

    }
    return 0;
}

Проверьте комментарии в коде.

373
задан Leo Dabus 5 November 2017 в 19:01
поделиться

3 ответа

iOS 9 и новее:

iOS 9 добавила новый класс под названием NSBatchDeleteRequest , который позволяет легко удалять объекты, соответствующие предикату, без необходимости загружать их все в объем памяти. Вот как это можно использовать:

Swift 2

let fetchRequest = NSFetchRequest(entityName: "Car")
let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)

do {
    try myPersistentStoreCoordinator.executeRequest(deleteRequest, withContext: myContext)
} catch let error as NSError {
    // TODO: handle the error
}

Objective-C

NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Car"];
NSBatchDeleteRequest *delete = [[NSBatchDeleteRequest alloc] initWithFetchRequest:request];

NSError *deleteError = nil;
[myPersistentStoreCoordinator executeRequest:delete withContext:myContext error:&deleteError];

Дополнительную информацию о пакетном удалении можно найти в сеансе «Что нового в основных данных» на WWDC 2015 ( начиная с ~ 14: 10).

iOS 8 и более ранние версии:

Получить их все и удалить все:

NSFetchRequest *allCars = [[NSFetchRequest alloc] init];
[allCars setEntity:[NSEntityDescription entityForName:@"Car" inManagedObjectContext:myContext]];
[allCars setIncludesPropertyValues:NO]; //only fetch the managedObjectID

NSError *error = nil;
NSArray *cars = [myContext executeFetchRequest:allCars error:&error];
[allCars release];
//error handling goes here
for (NSManagedObject *car in cars) {
  [myContext deleteObject:car];
}
NSError *saveError = nil;
[myContext save:&saveError];
//more error handling here
700
ответ дан 23 November 2019 в 00:01
поделиться

ООП путь без любых строк как имена объектов Swift 3 +, Xcode 10 +

func batchDelete<T>(in context: NSManagedObjectContext, fetchRequest: NSFetchRequest<T>) throws {
    guard let request = fetchRequest as? NSFetchRequest<NSFetchRequestResult> else {
        throw ErrorService.defaultError
    }
    let batchDeleteRequest = NSBatchDeleteRequest(fetchRequest: request)
    do {
        try context.execute(batchDeleteRequest)
    } catch {
        throw error
    }
}

затем просто призывает,/ловят блок

    let fetchRequest: NSFetchRequest<YourEntity> = YourEntity.fetchRequest()
    do {
        let data = try context.fetch(fetchRequest)
        if data.count > 0 {
            try self.batchDelete(in: context, fetchRequest: fetchRequest)
        }
    } catch {
        // throw error
    }
0
ответ дан 23 November 2019 в 00:01
поделиться

Почему бы не сложить данные, которые вы получаете с существующим кешем? В противном случае это не совсем «обновление», это «запуск заново», и вы можете также удалить / удалить файл SQLLite и начать заново (при условии, что вы не сохраняете и другие данные).

2
ответ дан 23 November 2019 в 00:01
поделиться