我已经完成了以下设置:
@interface Item : NSObject {
NSInteger *item_id;
NSString *title;
UIImage *item_icon;
}
@property (nonatomic, copy) NSString *title;
@property (nonatomic, assign) NSInteger *item_id;
@property (nonatomic, strong) UIImage *item_icon;
- (NSString *)path;
- (id)initWithDictionary:(NSDictionary *)dictionairy;
@end
和
#import <Foundation/Foundation.h>
#import "Item.h"
@interface Category : Item {
}
- (NSString *)path;
@end
我有一个包含类别实例的数组(称为&#39;类别&#39;),我希望根据它的item_id取出一个项目。这是我用于此的代码:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"item_id == %d", 1];
NSArray *filteredArray = [categories filteredArrayUsingPredicate:predicate];
这会导致以下错误:
* 由于未捕获的异常终止应用&#39; NSUnknownKeyException&#39;,原因:&#39; [valueForUndefinedKey:]:此类是 密钥item_id不符合密钥值编码。&#39;
我该如何解决这个问题以及我做错了什么?这些属性是合成的,我可以在Category实例上成功访问和设置item_id属性。
答案 0 :(得分:4)
您已将item_id
属性声明为指针。但NSInteger
是标量类型(32位或64位整数),因此您应将其声明为
@property (nonatomic, assign) NSInteger item_id;
备注:从LLVM 4.0编译器(Xcode 4.4)开始,@synthesize
和实例变量都会自动生成。
答案 1 :(得分:3)
首先,NSArray不能包含原始类型的对象,如1,2,3。但是,确实包含对象。因此,在创建谓词时,您应该以与获取对象相同的方式创建谓词。上面的谓词应该改为像这样的东西才能发挥作用;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"item_id == %@", @(1)];
答案 2 :(得分:3)
NSString *str = [NSString stringWithFormat:@"%i",yourIntVariable];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"item_id == %@", str];
NSArray *filteredArray = [categories filteredArrayUsingPredicate:predicate];