Questa è la panoramica del mio problema:Alcune relazioni CoreData vengono persi dopo la chiusura app
sto aggiungendo (e confermano che vengono aggiunti) circa 1400 rapporti caricati da un servizio di sapone in CoreDat. Dopo aver chiuso l'app e averla riaperta, alcune delle relazioni sono perse; Ne vedo solo circa 800 (anche se varia). Inoltre, non ricevo errori.
e ora, ulteriori dettagli:
Ho un oggetto chiamato User
che ha informazioni su servizi di un utente sono salvati; sembra qualcosa di simile:
@interface OosUser : NSManagedObject
+ (OosUser *) userFromSlug: (NSString *) slug;
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *slug;
@property (nonatomic, retain) NSMutableSet /* Service */ *services;
- (void) addServicesObject: (Service *)service;
- (void) removeServicesObject: (Service *) service;
@end
@implementation User
@dynamic name;
@dynamic slug;
@dynamic services;
static NSString *fetchPredicate = @"slug = %@";
+ (User *) userFromSlug:(NSString *)slug
{
User *result = [super objectWithPredicate: fetchPredicate, slug];
if (!result) {
result = [super create];
result.slug = slug;
}
return result;
}
@end
Nella parte del codice in cui vengono utilizzati i dati, i rapporti vengono salvati in questo modo:
NSMutableSet *userServices = self.user.services;
for (Service *service in servicesToAdd) {
[self.services addObject: service];
bool contained = false;
for (Service *userService in userServices) {
if ((contained = [userService.slug isEqualToString:service.slug])) {
break;
}
}
if (!contained) {
// [userServices addObject:service];
[self.user addServicesObject: service];
NSError *error = nil;
if (![[service managedObjectContext] save:&error]) {
NSLog(@"Saving failed");
NSLog(@"Error: %@", [error localizedDescription]);
}else {
NSLog(@"Registered service %d: %@", self.services.count, service.slug);
}
}
}
Il caso è che ho controllato con il debugger e posso vedere che tutte le oltre 1400 relazioni vengono aggiunte, ma quando l'app viene resettata e vengono ripristinate tramite self.user.services ottengo solo circa 800 oggetti.
Perché questo potrebbe accadere? Qualcuno ha avuto questo prima?
Grazie in anticipo.
UPDATE:
La gente continua suggerendo che non sto usando Core Data correttamente, ma il problema è che i dati vengono persi dopo il riavvio dell'applicazione. Non ci sono assolutamente problemi durante l'utilizzo. Sto usando Core Data nel modo corretto in quanto potrebbe essere fornita la documentazione limitata e gli esempi che ottieni da Apple.
Si salva il contesto in ogni iterazione? Perché? E dove aggiungi l'oggetto servizio all'utente? –
Lo stavo facendo alla fine dell'iterazione, ma ho fatto questo per vedere se quello era il problema. Lo aggiungo a 'userServices', che è un NSMutableSet recuperato dall'utente. Ho anche provato a usare 'addServicesObject' con risultati simili. – pablisco
Ì pensa di sbagliare come funzionano i dati di base.Devi prima inserire in db l'oggetto e poi aggiungerlo con addServicesObject: come relazione all'utente o aggiungerlo in un set ausiliario e quindi impostare la relazione da utente a servizi con addServices: (NSSet *) valore; metodo –