在“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 <CoreData/CoreData.h>
在#import <RestKit/RestKit.h>
之前添加#import <CoreData/CoreData.h>
相反,在您要导入 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更改