내 문제의 짧은 버전 : 개체를 삭제하고 이전에 삭제 한 개체를 반환하는 가져 오기를 수행 한 후.코어 데이터 삭제 된 개체를 가져 오는 중
나는이 아키텍처를 다음 해요 :
# PersistenceService.h
#import <Foundation/Foundation.h>
@interface PersistenceService : NSObject
@property (nonatomic, retain) NSManagedObjectContext *context;
-(instancetype) init;
-(void) saveContext;
@end
# PersistenceService.m
@implementation PersistenceService
-(instancetype) init {
self = [super init];
if (self) {
self.context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
self.context.parentContext = [DataManager sharedInstance].managedObjectContext;
}
return self;
}
-(void) saveContext {
NSManagedObjectContext *context = self.context.parentContext;
[self.context performBlock:^{
NSError *error;
[self.context save:&error];
[context performBlock:^{
NSError *error;
[context save:&error];
[context.parentContext performBlock:^{
NSError *error;
[context.parentContext save:&error];
}];
}];
}];
}
@end
나는, 삭제하기 전에 SyncService - -> 지속성 서비스 지속성 서비스 계층에서> NSManagedObject
내 모든 클래스는 다음 클래스의 자식입니다 내 주요 컨텍스트에서 객체를 가져 오십시오 :
# Synchronizer.m
-(void) synchronize {
NSArray *pseudoLeads = [[[PseudoLeadPersistenceService alloc] init] getAllParentPseudoLeads];
if (pseudoLeads) {
PseudoLeadDAO *pseudoLead = [pseudoLeads objectAtIndex:0];
if ([pseudoLead.type isEqualToNumber:[NSNumber numberWithInt:Capture]]) {
CaptureSyncService *service = [[CaptureSyncService alloc] initWithDelegate:self andPseudoLead:pseudoLead];
[service executeRequest];
} else {
HotleadSyncService *service = [[HotleadSyncService alloc] initWithDelegate:self andPseudoLead:pseudoLead];
[service executeRequest];
}
}
}
.
# PseudoLeadPersistenceService.m
-(NSArray *) getAllParentPseudoLeads {
return [PseudoLeadDAO findAllParentPseudoLeadsInContext:self.context.parentContext];
}
그리고 여기 내가 가져 실제로 내 서브 컨텍스트에서 개체를 삭제 :
# PseudoLeadPersistenceService.m
-(void) deletePseudoLeadById:(NSNumber *)pseudoLeadId andEventId:(NSNumber *)eventId {
PseudoLeadDAO *pseudoLeadDAO = [PseudoLeadDAO findPseudoLeadById:pseudoLeadId andEventId:eventId inContext:self.context];
[self.context deleteObject:pseudoLeadDAO];
[self saveContext];
}
그런 다음 -(void) synchronize
다시 호출되고 삭제 된 개체는 고장으로 다시 보여줍니다. 이 시점에서 원하는만큼 가져올 수 있으며 반환됩니다. 다시 -(void) deletePseudoLeadById:(NSNumber *)pseudoLeadId andEventId:(NSNumber *)eventId
방법으로 가면 오류가 사라지고 오류가 발 생합니다.
나는 도움을 주셔서 감사합니다. 감사!