Jest to opis mojego problemu:Niektóre relacje CoreData zostaną utracone po zamknięciu aplikacji
dodaję (i potwierdzają one dodane) około 1400 relacji ładowanych z usługą mydła w CoreDat. Po zamknięciu aplikacji i ponownym jej otwarciu niektóre z relacji zostają utracone; Widzę tylko około 800 z nich (chociaż to się zmienia). Ponadto nie otrzymuję żadnych błędów.
i teraz, więcej szczegółów:
mam obiektu o nazwie User
który zawiera informacje na temat usług użytkownik zapisanych; wygląda to mniej więcej tak:
@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
W części kodu gdy stosuje się dane, relacje są zapisane tak:
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);
}
}
}
Sprawa jest to, że zostały sprawdzone z debugger i widzę, że wszystkie ponad 1400 relacji są dodawane, ale gdy aplikacja jest resetowana i są one przywracane przez self.user.services, otrzymuję tylko około 800 obiektów.
Dlaczego tak się mogło stać? Ktoś już to miał?
Z góry dziękuję.
UPDATE:
Ludzie wciąż sugeruje, że nie używam danych Core poprawnie, ale problemem jest to, że dane zostaną utracone po ponownym uruchomieniu aplikacji. Nie ma absolutnie żadnego problemu z nim podczas korzystania z niego. Używam danych podstawowych, które są poprawne, ponieważ mogą zawierać ograniczoną dokumentację i przykłady, które otrzymujesz od Apple.
Zapisujesz kontekst w każdej iteracji? Czemu? I gdzie dodajesz obiekt usługowy do użytkownika? –
Robiłem to na końcu iteracji, ale robiłem to tak, aby zobaczyć, czy to był problem. Dodaję go do 'userServices', który jest NSMutableSet pobranym od użytkownika. Próbowałem również użyć 'addServicesObject' z podobnymi wynikami. – pablisco
Ì myślę, że źle rozumiesz działanie podstawowych danych.Najpierw należy wstawić do db obiekt, a następnie dodać go za pomocą addServicesObject: jako relację do użytkownika lub dodać ją w zestawie pomocniczym, a następnie ustawić relację od użytkownika do usług za pomocą wartości addServices: (NSSet *); method –