我得到了
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSDictionaryM metadata]: unrecognized selector sent to instance 0xd0b6250'当我到达并执行代码的这一部分时:
IDTherapyMetadata* meta = [self.dataCon getMetaDataFromId:content.metadata];dataCon中的方法如下所示:
-(IDTherapyMetadata*)getMetaDataFromId:(NSString*)metaDataId
{
for (IDTherapyMetadata* metadata in self.parser.metadata)
{
if([metaDataId compare:metadata.objId] == NSOrderedSame)
{
return metadata;
}
}
return nil;}
奇怪的是,如果我写
IDTherapyMetadata* meta = [self.dataCon getMetaDataFromId:[content valueForKey:@"metadata"]];相反,它工作得很好。
然而,我希望能够使用点符号,并查看苹果的文档,https://developer.apple.com/library/ios/documentation/cocoa/conceptual/KeyValueCoding/Articles/BasicPrinciples.html并没有帮助我。
为什么我会有这种行为,我该如何解决呢?
任何帮助都是非常感谢的。
编辑:IDTamyContents.h的代码:
#import <Foundation/Foundation.h>
@interface IDTherapyContents : NSObject
@property (nonatomic, copy)NSString* urlId;
@property (nonatomic, copy)NSString* url;
@property (nonatomic, copy)NSString* type;
@property (nonatomic, copy)NSString* timestamp;
@property (nonatomic, copy)NSString* metadata;
@property (nonatomic, copy)NSString* lang;
@property (nonatomic, copy)NSString* objId;
//methods
-(id)initWithJsonDic:(NSDictionary*)jsonDic;
@endIDTherpayMetaData.h代码
#import <Foundation/Foundation.h>
#import "IDTherapyImages.h"
@interface IDTherapyMetadata : NSObject
//Array contains 'String' objects
@property (nonatomic, strong)NSMutableArray* thumbnails;
@property (nonatomic, copy)NSString* title;
@property (nonatomic, copy)NSString* timestamp;
@property (nonatomic, copy)NSString* subCategory;
@property (nonatomic, copy)NSString* lang;
@property (nonatomic, copy)NSString* objId;
@property (nonatomic, copy)NSString* description5;
@property (nonatomic, copy)NSString* description4;
@property (nonatomic, copy)NSString* description3;
@property (nonatomic, copy)NSString* description2;
@property (nonatomic, copy)NSString* description1;
@property (nonatomic, copy)NSString* category;
//Array contains 'IDTherapyImages' objects
@property (nonatomic, strong)NSMutableArray* images;
//methods
-(id)initWithJsonDic:(NSDictionary*)jsonDic;
@end国际药物治疗产品代码:
@interface IDTherapyProducts : NSObject
//Array contains 'String' objects
@property (nonatomic, strong)NSMutableArray* contents;
@property (nonatomic, copy)NSString* uniqueId;
@property (nonatomic, copy)NSString* timestamp;
@property (nonatomic, copy)NSString* price;
@property (nonatomic, copy)NSString* posted;
@property (nonatomic, copy)NSString* normalPrice;
@property (nonatomic, copy)NSString* metadata;
@property (nonatomic, copy)NSString* lang;
@property (nonatomic, copy)NSString* objId;
@property (nonatomic, copy)NSString* badge;
//methods
-(id)initWithJsonDic:(NSDictionary*)jsonDic;
@end发布于 2013-09-25 10:58:13
这是将属性与KVC混淆的简单情况。它们是不同的东西。
content.metadata不过是[content metadata]的语法糖。因此,您需要在content上使用一个名为-metadata的方法,并且由于content是一个NSDictionary,所以不存在该方法。这就是抛出异常的原因。
在任何普通对象上,[content valueForKey: @"metadata"]也会抛出异常,因为KVC查找具有该名称的方法。但是,在NSDictionary上,-valueForKey:被重写为调用-objectForKey:,除非键以@开头,在这种情况下,@被剥离,[super valueForKey: ...]被调用。
然而,我希望能够使用点符号。
然后在NSDictionary上需要一个名为-metadata的方法。你可以用一个分类。
@interface NSDictionary(MyMetadataExtension)
-(id) metadata;
@end
@implementation NSDictionary(MyMetadataExtension)
-(id) metadata
{
return [self objectForKey: @"metadata"];
}
@endhttps://stackoverflow.com/questions/19002827
复制相似问题