Ошибка при сохранении основных данных sqlite в NSPersistentDocument

У меня есть небольшое приложение COCOA Mac OS для работы с основными данными. Я переопределил функцию сохранения по умолчанию, чтобы выполнять дополнительную работу после сохранения документа (также автоматически сохранять zip-копию).

Каждый раз, когда я сохраняю - программа вылетает с EXC_BAD_ACCESS в строке, где я вызываю [super writeToURL ...] Хорошая часть - документ сохраняется правильно. Вот код:

    - (BOOL)writeToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation originalContentsURL:(NSURL *)absoluteOriginalContentsURL error:(NSError **)error{

        NSLog(@"Overriding SAVE operation");
       //  Crash everytime with objc_msSend or EXC_BAD_ACCESS (but saves properly):
        BOOL res = [super writeToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation originalContentsURL:(NSURL *)absoluteOriginalContentsURL error:(NSError **)error];

        if(res){ // zip and save zipped copy...}..
    }

Каждый раз я получаю похожую, но не идентичную трассировку стека, говорящую о нераспознавании селектора или о проблеме с удалением чего-либо из persistenceStoreCoordinator.

Мой координатор настраивается простым способом:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:

                             [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

Кто-нибудь знает, что может случиться? Я долго не мог отследить...

Трассировка стека отладчика:

 #0 0x9141f4e6 in objc_exception_throw
#1  0x951288e8 in +[NSException raise:format:arguments:]
#2  0x9512885a in +[NSException raise:format:]
#3  0x956837dc in -[_NSManagedProxy _entity]
#4  0x9568392a in -[_NSManagedProxy fetchRequestWithSortDescriptors:limit:]
#5  0x95961f4a in -[_NSManagedProxy _storesDidChange:]
#6  0x95f801c3 in _nsnote_callback
#7  0x950b03c3 in __CFXNotificationPost
#8  0x950afdca in _CFXNotificationPostNotification
#9  0x95f75090 in -[NSNotificationCenter postNotificationName:object:userInfo:]
#10 0x906da1dc in -[NSPersistentStoreCoordinator(_NSInternalMethods) _postStoresChangedNotificationsForStores:changeKey:options:]
#11 0x906cbd52 in -[NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:]
#12 0x9597f2e7 in -[NSPersistentDocument configurePersistentStoreCoordinatorForURL:ofType:modelConfiguration:storeOptions:error:]
#13 0x00002a35 in -[MyDocument configurePersistentStoreCoordinatorForURL:ofType:modelConfiguration:storeOptions:error:] at MyDocument.m:79
#14 0x95c3536f in -[NSPersistentDocument(NSDeprecatedInternal) _configurePersistentStoreCoordinatorForURL:ofType:error:]
#15 0x9597f585 in -[NSPersistentDocument writeToURL:ofType:forSaveOperation:originalContentsURL:error:]
#16 0x00002ab9 in -[MyDocument writeToURL:ofType:forSaveOperation:originalContentsURL:error:] at MyDocument.m:90
#18 0x95822a4a in -[NSDocument writeSafelyToURL:ofType:forSaveOperation:error:]

Благодарность


person Lukasz    schedule 16.09.2010    source источник
comment
говоря о не распознавании селектора, пожалуйста, сообщите нам, какой селектор. почему вы делаете приведение к каждому параметру в своем вызове [super wirteToURL....]   -  person Martin Brugger    schedule 16.09.2010
comment
Упс. Я не заметил этого литья. Большое спасибо за открытие этого. Должно быть, я попал туда с помощью Ctrl+C ;-). Комплитер даже не «предупредил» об этом. На данный момент я переделываю всю модель данных, так как обнаружил странную ошибку в представлении графика модели. Xcode каким-то образом объединил 2 таблицы. Я не знаю, было ли это проблемой. Я вернусь к этому, когда снова закончу переподключение привязок.   -  person Lukasz    schedule 16.09.2010
comment
Если проблема не устранена, следуйте совету Мартина и опубликуйте фактическое сообщение, которое вы получили. Перефразирование всегда неправильно при решении проблем программирования.   -  person Joshua Nozzi    schedule 16.09.2010
comment
Спасибо, ребята, за помощь. После воссоздания таблиц, которые вели себя странно в визуальном представлении xcdatamoel, теперь все работает нормально. 2 таблицы в представлении графика, которые были объединены вместе, но все еще видны в списке сущностей. Я не смог найти способ разделить их, не удаляя из самой модели.   -  person Lukasz    schedule 17.09.2010
comment
Тогда будьте хорошим гражданином SO и опубликуйте свое решение в ответе и примите этот ответ.   -  person Joshua Nozzi    schedule 17.09.2010


Ответы (1)


Спасибо, ребята, за помощь. После воссоздания таблиц, которые вели себя странно в визуальном представлении xcdatamoel, теперь все работает нормально. 2 таблицы в представлении графика, которые были объединены вместе, но все еще видны в списке сущностей. Я не смог найти способ разделить их, не удаляя из самой модели.

person Lukasz    schedule 18.09.2010