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

Posted

技术标签:

【中文标题】在“RKObjectManager”类型的对象上找不到属性“managedObjectStore”【英文标题】:Property 'managedObjectStore' not found on object of type 'RKObjectManager' 【发布时间】:2013-09-16 02:31:27 【问题描述】:

我一直在尝试使用 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)];

感谢您提供的任何意见!

【问题讨论】:

您是否从 0.1x 升级到 0.20.3?还有其他编译错误/警告吗? 请将回答问题的答案标记为“已接受”。这不仅可以帮助花时间发布答案的人,还可以帮助 SO 社区。​​span> 【参考方案1】:

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

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

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

正在工作。

但是

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

不工作。

【讨论】:

Tnq Tomusm 我花了 2 个小时来研究代码的其他部分。这个错误很小,但对于编译器来说,这绝对是一件大事。学习了一些新东西。再次Tnx 在 Swift 中,您可以按顺序将上述内容添加到项目的桥接头中 我希望我能再次对此投票。它也应该被标记为接受的答案@Cale Spratt 哇...好抓人。【参考方案2】:

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

【讨论】:

解决了 XCode 7.3 (7D175) 上的问题【参考方案3】:

在 XCode6 中创建新项目时默认不创建“pch”文件,我必须按照 PCH File in Xcode 6 手动创建 pch 文件

在 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 有几个包含文件使用此构造,因此请进行全局搜索。

【讨论】:

由于这个条件定义语句,我面临同样的 swift 问题【参考方案6】:

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

在 pch 中添加#import &lt;CoreData/CoreData.h&gt;#import &lt;RestKit/RestKit.h&gt; 之前添加#import &lt;CoreData/CoreData.h&gt;

相反,在您要导入 restkit 的相关文件的顶部,

// Workaround for bug on RestKit 0.26.0 according to https://github.com/RestKit/RestKit/issues/2352
#ifndef RKCoreDataIncluded 
#define RKCoreDataIncluded 
#endif

【讨论】:

以上是关于在“RKObjectManager”类型的对象上找不到属性“managedObjectStore”的主要内容,如果未能解决你的问题,请参考以下文章

在“CBPeripheral *”类型的对象上找不到属性“uuid”

在类型的对象上找不到 Restkit 2.0 'managedObjectContext'

当RKObjectManager无法发布对象时,如何丢弃一个对象中的CoreData更改

在“ViewController”类型的对象上找不到属性引用?

在“UITableViewCell”类型的对象上找不到属性

在“UIDatePicker”类型的对象上找不到属性“preferredDatePickerStyle”