2016-04-24 9 views
1

Ich versuche, Daten in den persistenten Speicher mit verwalteten Objektkontext zu schreiben. einfache statische Daten einfügen. save gibt keine Fehler zurück, aber fetch liefert keine Ergebnisse. Hier ist mein Code:Core Data Managed Object context save funktioniert nicht

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"MyDB" withExtension:@"momd"];` 

NSManagedObjectModel *mom = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; 

NSAssert(mom!=nil, @"Error in initializing Managed Object Model"); 

NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom]; 
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; 
[moc setPersistentStoreCoordinator:psc]; 
[self setManagedObjectContext:moc]; 

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSURL *documentsURL = [[fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
NSURL *storeURL = [documentsURL URLByAppendingPathComponent:@"MyDB.sqllite"]; 

NSError *error = nil; 
NSPersistentStoreCoordinator *pscStore = [moc persistentStoreCoordinator]; 
NSPersistentStore *store = [pscStore addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]; 
NSAssert(store!=nil,@"Error in initializing PSC:%@\n%@",[error localizedDescription],[error userInfo]); 

//insert 
Schedule *schedule = [NSEntityDescription insertNewObjectForEntityForName:@"Schedule" inManagedObjectContext:moc]; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"dd-MM-yyyy"]; 
NSDate *sessionEndDateReturned = [NSDate alloc]; 
sessionEndDateReturned = [dateFormatter dateFromString:@"24-04-2016"]; 
NSDate *sessionStartDateReturned = [NSDate alloc] ; 
sessionStartDateReturned = [dateFormatter dateFromString:@"25-04-2016"]; 

//schedule.category = @"cat"; 
schedule.about = @"testabout"; 
schedule.endDate = sessionEndDateReturned; 
schedule.eventId = @"e1"; 
schedule.sessionID = @"s1"; 
schedule.roomNumber = @"r1"; 
schedule.startDate = sessionStartDateReturned; 
schedule.topic = @"topic1"; 
schedule.type = @YES; 
NSLog(@"inserted objs:%@",moc.insertedObjects); 
//save 
NSError *insertError = nil; 
if(![moc save:&insertError]){ 
    NSLog(@"%@ %@",insertError,insertError.localizedDescription); 
} 

//fetch 
NSFetchRequest *fetchReq = [NSFetchRequest fetchRequestWithEntityName:@"Schedule"]; 
NSError *fetchError = nil; 
NSArray *result =[moc executeRequest:fetchReq error:&fetchError]; 
if(fetchError){ 
    NSLog(@"fetch Error: %@",fetchError.localizedDescription); 
} 
else 
{ 
    NSLog(@"myFetch Result:%@",result); 
} 

kann mir jemand sagen, wo ich falsch liege?

Antwort

1

alles ist in dem oben genannten Code in Ordnung, außer Teil holen. nur eine kleine Änderung ist erforderlich. Speichern ist in Ordnung, Problem nur beim Abrufen. die mit unter Leitung ausführen holen ändern:

NSArray *result =[moc executeFetchRequest:fetchReq error:&error];

ich executeRequest statt executeFetchRequest tat: |