2013-09-16 2 views
28

Я пытаюсь работать с версией 0.20.3 библиотеки Restkit. Недавно произошла ошибка, и я не могу понять, как ее решить. Она заключается в следующем:Свойство «managedObjectStore» не найдено на объекте типа «RKObjectManager»

недвижимости 'managedObjectStore' не найден на объект типа 'RKObjectManager *

Это происходит в строке, содержащей

objectManager.managedObjectStore = managedObjectStore;

Ниже приводится небольшой блок моего кода, чтобы помочь с идентификацией. Я использовал CocoaPods для установки всех необходимых библиотек, и все, кажется, правильно связано.

#import "AppDelegate.h" 
#import <RestKit/RestKit.h> 
#import <RestKit/CoreData.h> 
#import <CoreData/CoreData.h> 
#import <RestKit/ObjectMapping.h> 
#import "Temperature.h" 

@implementation AppDelegate 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions 
{ 

    //let AFNetworking manage the activity indicator 
    [AFNetworkActivityIndicatorManager sharedManager].enabled = YES; 

    // Override point for customization after application launch. 
    RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://grid.no-ip.biz/grid"]]; 
    NSURL *modelURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Grideye" ofType:@"momd"]]; 

    //Initialize managed object store 
    NSManagedObjectModel *managedObjectModel = [[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL ] mutableCopy]; 
    RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel]; 

    objectManager.managedObjectStore = managedObjectStore; 

    // Setup our object mappings 
    /** 
    Mapping by entity. Here we are configuring a maping by targetting a Core Data entity with a specific 
    name. This allows us to map back Sensor database objects directly onto NSManagedObject instances 
    there is no backing model class 
    */ 
    RKEntityMapping *sensorMapping = [RKEntityMapping mappingForEntityForName:@"SensorID" inManagedObjectStore:managedObjectStore]; 
    sensorMapping.identificationAttributes = @[ @"sensorID"]; 
    [sensorMapping addAttributeMappingsFromDictionary:@{ 
     @"sensorID" : @"sensorID", 
     @"cellNum" : @"cellNum", 
     @"timeStamp": @"timeStamp", 
     @"temp"  : @"temp" 
     }]; 

    //Update date format so that we can parse Sensor dates properly 
    [RKObjectMapping addDefaultDateFormatterForString:@"E MMM d HH:mm:ss Z y" inTimeZone:nil]; 

    // Register our mappings with the provider 
    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:sensorMapping method:RKRequestMethodGET pathPattern:@":grid" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

Спасибо за любой вклад, который вы можете предоставить!

+0

ли вы обновить от 0,1x до 0,20,3? Любые другие ошибки компиляции/предупреждения? – Wain

+0

Пожалуйста, отметьте ответы, которые ответили на вопрос как «Принято». Это не только помогает человеку, который требует времени для публикации ответа, но и помогает сообществу SO. –

ответ

3

Добавить

#import <CoreData/CoreData.h> 

в файл .PCH.

73

У меня была такая же проблема при обновлении с 0.20.1 до 0.20.3.

Что нужно сделать, так это импортировать CoreData перед импортом RestKit.

#import <CoreData/CoreData.h> 
#import <RestKit/RestKit.h> 

работает.

но

#import <RestKit/RestKit.h> 
#import <CoreData/CoreData.h> 

не работает.

+0

Tnq Tomusm Я тянул свои волосы с 2-х часов, изучая другие части кода. Ошибка была небольшой, но для компилятора это определенно большое дело. Tnx еще раз – Dinakar

+4

В Swift вы добавили бы вышесказанное в этом порядке к заголовку моста проекта –

+0

Хотелось бы, чтобы я смог снова проголосовать за это. Он также должен быть отмечен как принятый ответ @Cale Spratt –

4

В XCode6 о создании нового файла проекта «РСН» не создается по умолчанию, я должен был создать файл PCH вручную по PCH File in Xcode 6

Я получил это работает После импорта заголовков в PCH файле:

#import <CoreData/CoreData.h> 
#import <RestKit/RestKit.h> 
26

Добавить в настройках сборки Путь поиска пользователей"$ {PROJECT_DIR}/Pods" Рекурсивный. Это решило проблему в моем случае.

+0

Спасибо. Помогал. – kirander

+0

xCode7, помог! –

+1

Решил проблему на XCode 7.3 (7D175) –

2

Основная причина этого вопроса в RKObjectManager.h

#ifdef _COREDATADEFINES_H 
# if __has_include("RKCoreData.h") 
#  define RKCoreDataIncluded 
# endif 
#endif 

Это включает так везде RKCoreData.h появляется изменится RestKit/CoreData.h Есть несколько включаемые файлы, которые используют эту конструкцию таким образом изменило имена выполните глобальный поиск.

+0

Im сталкивается с той же проблемой для быстрой из-за этой условной инструкции определения –

0

Если вы обновляете от 0.20 до 0.26 (скажем, модернизация очень старый проект, который не был обновлен в течение многих лет), вы можете обнаружить, что оба из следующих действий, предложенные в других ответах, являются недостаточными:

  • добавить #import <CoreData/CoreData.h> в PCH
  • надстройки #import <CoreData/CoreData.h> перед тем #import <RestKit/RestKit.h>

Вместо этого, в верхней части соответствующего файла, в котором вы импортируете restkit,

// Workaround for bug on RestKit 0.26.0 according to https://github.com/RestKit/RestKit/issues/2352 
#ifndef RKCoreDataIncluded 
#define RKCoreDataIncluded 
#endif 
Смежные вопросы