2012-12-12 21 views
2

我通過CocoaPods安裝了RestKit(0.20.0-pre3)並將其配置爲文檔狀態。當執行getObjectsAtPath和RestKit做的映射,我得到:RestKit 0.20.0-pre3錯誤 - [NSManagedObjectContext saveToPersistentStore:]:無法識別的選擇器發送到實例

*終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因是: ' - [的NSManagedObjectContext saveToPersistentStore:]:無法識別的選擇發送到實例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 
    }]; 


} 

感謝您的幫助!

+0

沒有人有線索嗎? – Patrick

回答

0

這很可能表明您的鏈接器標記設置不正確。鏈接器標記-ObjC需要加載類別方法。你是否覆蓋目標上的鏈接器標誌?如果您在目標級別具有其他配置,則至少需要包含$(inherited)。在Xcode中查看設置時,您應該在鏈接器標記中看到-ObjC

相關問題