我在实例上调用基类方法时遇到'无法识别的选择器'异常,但无法看到问题所在。
我有一个名为Form的对象如下:
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#import "HPSDbBase.h"
@interface Form : HPSDbBase
@end
Form的基类如下所示:
#import <CoreData/CoreData.h>
@interface HPSDbBase : NSManagedObject
@property (nonatomic, retain) NSString * id;
@property (nonatomic, retain) NSString * json;
-(id)getJSONElement:(NSString*)key;
@end
然后我尝试在视图控制器方法中使用Form对象,如下所示:
HPSAppDelegate* appDelegate = [[UIApplication sharedApplication] delegate];
NSError* error = nil;
NSFetchRequest * request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Form" inManagedObjectContext:appDelegate.managedObjectContext]];
NSArray* arrayOfForms = [appDelegate.managedObjectContext executeFetchRequest:request error:&error];
for (int i=0;i<arrayOfForms.count;i++)
{
Form* dbForm = [arrayOfForms objectAtIndex:i];
NSLog(@"Form.json=%@",dbForm.json); // this works
NSString* wwwww = (Form*)[dbForm getJSONElement:@"test"]; // exception here
}
例外是:
-[NSManagedObject getJSONElement:]: unrecognized selector sent to instance 0x8290940
谁能看到我做错了什么?
万分感谢!
编辑1
以下是HPSDbBase的实现:
#import "HPSDbBase.h"
@implementation HPSDbBase
@dynamic id;
@dynamic json;
-(id)getJSONElement:(NSString*)key
{
NSData *jsonData = [[self json] dataUsingEncoding:NSUTF8StringEncoding];
NSError *e = nil;
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options: NSJSONReadingMutableContainers error: &e];
NSDictionary *jsonDictionary = (NSDictionary *)jsonObject;
id rc = [jsonDictionary objectForKey:key];
return rc;
}
@end
答案 0 :(得分:3)
我追查了这个问题。
我已经重命名了我的核心数据对象。我重命名了关于核心数据对象名称的所有内容,但显然还不够。我删除了核心数据实体,然后用正确的名称重新创建了一个全新的实体,一切都开始有效了。
答案 1 :(得分:1)
重命名课程后,我也收到了这个错误。
如果你不想删除你的类,我发现我可以通过打开我的“xcdatamodeld”文件,然后点击Configurations - &gt;来解决错误。默认。在那里,实体的类描述仍然引用旧名称。在这里纠正后,问题得到了解决。
答案 2 :(得分:0)
我也收到了这个错误。结果发现,实体的核心数据配置中的属性名称中只有一个拼写错误。它在类实现中的@dynamic语句中正确命名,因此在编译时不会引发标志,但是一旦访问就会引发。因为我正在设置NSManagedObject子实体,所以我分心寻找明显的东西。只是在这里列出这个,以防其他人在同一条船上。