Вы должны назначить 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;
}
Проверьте комментарии в коде.
iOS 9 добавила новый класс под названием NSBatchDeleteRequest
, который позволяет легко удалять объекты, соответствующие предикату, без необходимости загружать их все в объем памяти. Вот как это можно использовать:
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
}
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).
Получить их все и удалить все:
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
ООП путь без любых строк как имена объектов 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
}
Почему бы не сложить данные, которые вы получаете с существующим кешем? В противном случае это не совсем «обновление», это «запуск заново», и вы можете также удалить / удалить файл SQLLite и начать заново (при условии, что вы не сохраняете и другие данные).