J'essaie d'ajouter des données à CoreData. Cela fonctionne bien quand je construis à partir de Xcode au téléphone mais quand j'essaye de lancer l'application directement à partir de l'iPhone il se bloque à la première sauvegarde au contexte.Ajout d'un grand nombre de propriétés dans les données de base, écrasement lors du démarrage à partir du téléphone mais pas de Xcode
Je lis un fichier texte qui est synchronisé via le partage de fichiers iTunes, le fichier est assez gros (~ 350 000 lignes). Les valeurs que je reçois du fichier sont ajoutées à deux tableaux différents (codes à barres et noms de produit). Les tableaux sont ensuite groupés et envoyés à la fonction où je sauvegarde les données.
de la boucle de tableau: [...]
words = [rawText componentsSeparatedByString:@";"];
int loopCounter = 0;
int loopLimit = 20000;
int n = 0;
int wordType;
NSEnumerator *word = [words objectEnumerator];
NSLog(@"Create arrays");
while(tmpWord = [word nextObject]) {
if ([tmpWord isEqualToString: @""] || [tmpWord isEqualToString: @"\r\n"]) {
// NSLog(@"%@*** NOTHING *** ",tmpWord);
}else {
n++;
wordType = n%2;
if (wordType == kBarcode) {
[barcodes addObject: tmpWord];
}else if (wordType == kProduct) {
[productNames addObject: tmpWord];
}
// Send to batch //
loopCounter ++;
if (loopCounter == loopLimit) {
loopCounter = 0;
NSLog(@"adding new batch");
[self addBatchOfData];
[barcodes release];
[productNames release];
barcodes = [[NSMutableArray arrayWithCapacity:20000] retain];
productNames = [[NSMutableArray arrayWithCapacity:20000] retain];
}
}
[...]
Et puis la fonction de sauvegarde:
-(void)addBatchOfData {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSError *error;
NSUInteger loopLimit = 5000;
NSUInteger loopCounter = 0;
NSString *ean;
NSString *designation;
for (int i=0; i<[barcodes count];i++) {
ean = [barcodes objectAtIndex:i];
designation = [productNames objectAtIndex:i];
Product *product = (Product *)[NSEntityDescription insertNewObjectForEntityForName:@"Product" inManagedObjectContext:importContext];
[product setDesignation:designation];
[product setBarcode:ean];
loopCounter ++;
if (loopCounter == loopLimit) {
NSLog(@"Save CoreData");
[importContext save:&error];
[importContext reset];
[pool drain];
pool = [[NSAutoreleasePool alloc] init];
loopCounter = 0;
}
}
// Save any remaining records
if (loopCounter != 0) {
[importContext save:&error];
[importContext reset];
}
[pool drain];
}
C'est vraiment énervant que ça marche bien quand je construis à partir de Xcode. Heureusement il y a un paramètre que j'ai manqué ou quelque chose ...
EDIT: J'ai oublié de mentionner que je n'ai pas passé l'écran par défaut et je n'ai aucun journal. Cela peut-il avoir quelque chose à voir avec l'approvisionnement?
Merci Brent! C'est en fait comme ça que je l'ai résolu. J'ai été surpris à quel point il était facile de créer un nouveau fil. – Mike