29

我一直在尝试使用 Restkit 库的 0.20.3 版本。最近发生了一个错误,我不知道如何解决。如下:

在“RKObjectManager *”类型的对象上找不到属性“managedObjectStore”

它发生在包含

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)];

感谢您提供的任何输入!

4

6 回答 6

73

从 0.20.1 升级到 0.20.3 时,我遇到了完全相同的问题。

您需要做的是在导入 RestKit 之前导入 CoreData。

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

正在工作中。

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

不管用。

于 2013-10-01T10:14:34.647 回答
26

添加构建设置用户标题搜索路径 “${PROJECT_DIR}/Pods”递归。这解决了我的问题。

于 2015-11-20T08:47:10.613 回答
4

在 XCode6 中创建新项目“pch”文件默认情况下不会创建,我必须在 Xcode 6 中的 PCH 文件之后手动创建 pch 文件

在 pch 文件中导入标题后,我得到了它:

#import <CoreData/CoreData.h>
#import <RestKit/RestKit.h>
于 2014-11-14T11:56:07.390 回答
3

添加

#import <CoreData/CoreData.h>  

到您的 .pch 文件。

于 2013-09-29T11:22:09.993 回答
2

此问题的根本原因在于 RKObjectManager.h

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

此包含已更改名称,因此 RKCoreData.h 出现的任何地方都更改为 RestKit/CoreData.h 有几个包含文件使用此构造,因此请进行全局搜索。

于 2015-12-20T15:15:03.973 回答
0

如果您要从 0.20 升级到 0.26(例如,升级一个多年未更新的非常旧的项目),您可能会发现其他答案中建议的以下两项都不够:

  • 加入#import <CoreData/CoreData.h>pc
  • #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
于 2017-03-13T09:17:08.107 回答