ios - RestKit 0.20.0-pre3 错误-[NSManagedObjectContext saveToPersistentStore :]: unrecognized selector sent to instance

标签 ios cocoa core-data ios6 restkit

我通过 CocoaPods 安装了 RestKit (0.20.0-pre3),并按照文档所述进行了配置。当执行 getObjectsAtPath 和 RestKit 时,我得到的映射:

* Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSManagedObjectContext saveToPersistentStore:]: unrecognized selector sent to instance 0x9eaae40'

如果我设置断点,它将停止在 RKManagedObjectRequestOperation.m 的第 278 行处。

我按如下方式配置 RestKit:

- (void)configureRestKit{

    //initialize RestKit
    LLog(DEBUG_LEVEL, @"init RestKit");

    NSString *baseURL;

    // Log all HTTP traffic with request and response bodies
    //RKLogConfigureByName("RestKit/Network", RKLogLevelTrace);

    // Log debugging info about Core Data
    RKLogConfigureByName("RestKit/CoreData", RKLogLevelTrace);

    //Loging about the Entity Mapping
    RKLogConfigureByName("RestKit/ObjectMapping", RKLogLevelTrace)

    // enable activity indicator
    [AFNetworkActivityIndicatorManager sharedManager].enabled = YES;

    if (local) {
        baseURL = @"http://xyz.net";

    } else {
        baseURL = @"http://XYZ.net";
    }


    [RKMIMETypeSerialization registerClass:[RKNSJSONSerialization class] forMIMEType:@"application/json"];

    _objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:baseURL]];

    _managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
    _managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:_managedObjectModel];

    NSString *path = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"XYZ.sqlite"];
    //LLog(DEBUG_MODE,@"The object store: %@", _objectStore.description);

    [_managedObjectStore addSQLitePersistentStoreAtPath:path fromSeedDatabaseAtPath:nil withConfiguration:nil options:nil error:nil];

    [_managedObjectStore createManagedObjectContexts];
    [_managedObjectStore createPersistentStoreCoordinator];

    _managedObjectContext = _managedObjectStore.persistentStoreManagedObjectContext;
    _persistentStoreCoordinator = _managedObjectStore.persistentStoreCoordinator;
    _managedObjectModel = _managedObjectStore.managedObjectModel;

    _objectManager.managedObjectStore = _managedObjectStore;

    // 2012-06-13T00:00:00+01:00
    NSDateFormatter *dateFormatter = [NSDateFormatter new];
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'+01:00'"];
    dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
    dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];

    // Set it Globally
    [RKObjectMapping setPreferredDateFormatter:dateFormatter];

    LLog(DEBUG_LEVEL, @"DateFormater Test: %@", [dateFormatter stringFromDate:[NSDate date]]);

    // Add Entity Mapping
    RKEntityMapping *experienceMapping = [RKEntityMapping mappingForEntityForName:@"Experience" inManagedObjectStore:_managedObjectStore];
    [experienceMapping addAttributeMappingsFromArray:@[@"experienceid", @"city", @"descr", @"lat", @"lng", @"number", @"price", @"street"]];
    experienceMapping.identificationAttributes = @[@"experienceid"];


    NSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful); // Anything in 2xx
    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:experienceMapping pathPattern:@"/test.json" keyPath:@"experience" statusCodes:statusCodes];
    [_objectManager addResponseDescriptor:responseDescriptor];




    // ######  ONLY FOR TEST REASONS ######

    NSManagedObject *test = [NSEntityDescription
                                       insertNewObjectForEntityForName:@"Experience"
                                       inManagedObjectContext:_managedObjectContext];
    [test setValue:[NSNumber numberWithInt:1] forKey:@"experienceid"];
    [test setValue:@"Testville" forKey:@"city"];

    NSError *error;
    if (![_managedObjectContext save:&error]) {
        NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
    }

    [_objectManager getObjectsAtPath:@"/test.json" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
     // Handled with articleDescriptor
        LLog(DEBUG_LEVEL, @"Test");
     } failure:^(RKObjectRequestOperation *operation, NSError *error) {
     // Transport error or server error handled by errorDescriptor
     }];


}

感谢您的帮助!

最佳答案

这很可能表明您的链接器标志设置不正确。需要 -ObjC 链接器标志来加载类别方法。您是否覆盖了目标上的链接器标志?如果您在目标级别上有其他配置,则至少需要包含 $(inherited)。在 Xcode 中查看设置时,您应该会看到 -ObjC 出现在链接器标志中。

关于ios - RestKit 0.20.0-pre3 错误-[NSManagedObjectContext saveToPersistentStore :]: unrecognized selector sent to instance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13845163/

相关文章:

objective-c - Cocoa窗口位置异常

ios - iPhone 崩溃时删除的核心数据对象

core-data - SwiftUI/CoreData/Master/Detail(带编辑)/Xcode 11 - Beta 5

ios - 导航上的自定义按钮

ios - 如何设置城市边界?

ios - URLSession 和 UI 相关任务

macos - 沙盒 Mac 应用程序可以读取/写入哪些非用户目录?

ios - iPad 上 UITableView 的背景图片

macos - 如何在 NSWindow 中显示工作 TableView

ios - 核心数据、NSNumber、整数 32 和整数 64