Подтвердить что ты не робот

Свойство "managedObjectStore" не найдено на объекте типа "RKObjectManager"

Я пытаюсь работать с версией 0.20.3 библиотеки Restkit. Недавно произошла ошибка, и я не могу понять, как ее решить. Это следующее:

Свойство "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)];

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

4b9b3361

Ответ 1

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

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

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

работает.

но

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

не работает.

Ответ 2

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

Ответ 3

В XCode6 при создании нового проекта файл "pch" не создается по умолчанию, мне пришлось создать файл pch вручную после файла PCH в Xcode 6

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

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

Ответ 4

Добавить

#import <CoreData/CoreData.h>  

в ваш .pch файл.

Ответ 5

Основной причиной этой проблемы является RKObjectManager.h

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

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

Ответ 6

Если вы обновляетесь с 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