ОК, я понимаю, что вы пытаетесь проверить сейчас.Ответ в том, что у меня это отлично работает.Я вставил следующий код в конец -readFromURL:::
в подклассе документа моего приложения Core Data на основе документов:
[self.managedObjectContext performBlock:^{
Stark* stark = [NSEntityDescription insertNewObjectForEntityForName:@"Stark_entity"
inManagedObjectContext:self.managedObjectContext];
BOOL ok ;
NSError* error = nil;
NSLog(@"Testing two saves in %@", self);
stark.name = @"David";
stark.rating = @(3);
ok = [self.managedObjectContext save:&error];
NSLog(@"First Save ok=%hhd error = %@", ok, error);
stark.url = @"http://example.com";
stark.comments = @"Did it work?";
ok = [self.managedObjectContext save:&error];
NSLog(@"Second Save ok=%hhd error = %@", ok, error);
}];
После запуска этого кода NSLogs напечатало:
Testing two saves in BkmxDoc 0x100d308f0 "Test.bmco"
First Save ok=1 error = (null)
Second Save ok=1 error = (null)
И, изучив файл SQLite, я обнаружил, что новый объект действительно был вставлен и имел все четыре значения свойств, назначенных приведенным выше кодом.
Я согласен с @vadian, что там используется dispatch_semaphoreстранно, хотя я не вижу причин, по которым сбой может привести к сбережению.Просто чтобы доказать, что в последующем тесте я добавил эти три строки, используя dispatch_semaphore, повторно протестировал, и он все еще работал.
Наиболее вероятным источником проблемы является использование CoreDataManager
.Обратите внимание, что в моем коде я просто использовал raw `- [NSManagedObjectContext save:].