4

次のセットアップがあります。

@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

item_id に基づいて単一のアイテムを取り出したい Category インスタンス (「categories」と呼ばれる) を含む配列があります。そのために使用するコードは次のとおりです。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"item_id == %d", 1]; 
NSArray *filteredArray = [categories filteredArrayUsingPredicate:predicate];

これにより、次のエラーが発生します。

*キャッチされない例外 'NSUnknownKeyException' が原因でアプリを終了しています。理由: '[ valueForUndefinedKey:]: このクラスは、キー item_id のキー値コーディングに準拠していません。

どうすればこれを修正できますか?何が間違っていますか? プロパティが合成され、Category インスタンスで item_id プロパティにアクセスして正常に設定できます。

4

3 に答える 3

4

item_idプロパティをポインタとして宣言しました。ただしNSInteger、スカラー型 (32 ビットまたは 64 ビットの整数) であるため、次のように宣言する必要があります。

@property (nonatomic, assign) NSInteger item_id;

注意: LLVM 4.0 コンパイラ (Xcode 4.4) 以降では@synthesize、インスタンス変数とインスタンス変数の両方が自動的に生成されます。

于 2013-04-16T11:47:33.977 に答える
3
NSString *str = [NSString stringWithFormat:@"%i",yourIntVariable];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"item_id == %@", str]; 
NSArray *filteredArray = [categories filteredArrayUsingPredicate:predicate];
于 2013-04-16T11:38:04.793 に答える