代码之家  ›  专栏  ›  技术社区  ›  Lukasz

在nspersistentdocument中保存核心数据sqlite时出错

  •  0
  • Lukasz  · 技术社区  · 15 年前

    我有小型的CocoaMacOS应用程序来处理核心数据。 我已经重写了默认的保存功能,以便在保存文档后执行额外的工作(还自动保存一个zip副本)。

    每次我保存-程序崩溃,在我调用的行中有exc-bad-access[super-writetoul…] 好的部分是-文档保存正确。代码如下:

        - (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...}..
        }
    

    每次我得到相似但不完全相同的堆栈跟踪时,都会说不识别选择器或者从PersistentStoreCoordinator中删除某些内容时出现问题。

    我的协调员配置简单:

    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:]
    

    谢谢

    1 回复  |  直到 15 年前
        1
  •  0
  •   Lukasz    15 年前

    谢谢你们的帮助。在xcdatamoel可视化视图中重新创建了行为怪异的表之后,现在一切都正常了。图形视图中的两个表,它们在实体列表中仍然可见的同时连接在一起。我找不到一种不从模型本身删除的方法来分离它们。